使用spring-boot-starter-data-jpa遇到的一个SQL转义字符问题 JPA的BUG?

     在这里想定义一个用户表关联查询出部门名称,定义视图来查询是没有问题的,如果想简化一下不用视图直接在类里定义sql,这里的sql文本的.(点)会被替换为_(下划线)造成无法查询出来想来的数据,不知道是不是JPA的BUG,找了半天没有找到这个点的转换字符

想简单点都不行

使用spring-boot-starter-data-jpa遇到的一个SQL转义字符问题 JPA的BUG?_sql

在类里定义了

@Table(name=" (select u003.id AS id,u003.name AS name,u003.address AS address,u003.phone AS phone,u003.remark AS remark,"
        +" u003.id_dep AS id_dep,dep003.name AS dep_name "
        +" from  user u003 left join department dep003 on u003.id_dep = dep003.id )" )

问题现象

使用spring-boot-starter-data-jpa遇到的一个SQL转义字符问题 JPA的BUG?_SQL_02

将打印出来的sql格式化一眼就能看到

使用spring-boot-starter-data-jpa遇到的一个SQL转义字符问题 JPA的BUG?_SQL_03

定义


@Entity
//@Table(name = "user_view")//正确可以用的 视图
//@Table(name = " (select * from user_view) ")//正确可以用的 视图查询
@Table(name=" (select u003.id AS id,u003.name AS name,u003.address AS address,u003.phone AS phone,u003.remark AS remark,"
        +" u003.id_dep AS id_dep,dep003.name AS dep_name "
        +" from  user u003 left join department dep003 on u003.id_dep = dep003.id )"  )
public class UserView implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "id", nullable = false)
    private Long id;
    @Column(nullable = false, name = "name")
    private String name;
    @Column(nullable = true, name = "address")
    private String address;
    @Column(nullable = true, name = "phone")
    private String phone;
    @Column(nullable = true, name = "remark")
    private String remark;
    @Column(name = "id_dep", nullable = true)
    private Long idDep;
    @Column(name = "dep_Name", nullable = true)
    private String  depName;
    //....略 set get....
}

表结构

使用spring-boot-starter-data-jpa遇到的一个SQL转义字符问题 JPA的BUG?_SQL_04

 
SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for department
-- ----------------------------
DROP TABLE IF EXISTS `department`;
CREATE TABLE `department` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `remark` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;

-- ----------------------------
-- Records of department
-- ----------------------------
INSERT INTO `department` VALUES ('1', '管理部门', 'A');
INSERT INTO `department` VALUES ('2', '代码部门', 'B');

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) DEFAULT NULL,
  `address` varchar(200) DEFAULT NULL,
  `phone` varchar(30) DEFAULT NULL,
  `remark` varchar(200) DEFAULT NULL,
  `id_dep` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('20', 'AAA', 'sa', 'xxxxxxx', '说明', '1');
INSERT INTO `user` VALUES ('21', '1212', 'asdf', '444', '说明', '2');
INSERT INTO `user` VALUES ('22', 'AAAAA', '', '', '', null);
INSERT INTO `user` VALUES ('23', 'ASDFSADF', '', '', '', null);
INSERT INTO `user` VALUES ('24', '23232', '', '', '', null);
 

-- ----------------------------
-- View structure for user_view
-- ----------------------------
DROP VIEW IF EXISTS `user_view`;
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`%` SQL SECURITY DEFINER VIEW `user_view` AS select `u`.`id` AS `id`,`u`.`name` AS `name`,`u`.`address` AS `address`,`u`.`phone` AS `phone`,`u`.`remark` AS `remark`,`u`.`id_dep` AS `id_dep`,`dep`.`name` AS `dep_name` from (`user` `u` left join `department` `dep` on((`u`.`id_dep` = `dep`.`id`))) ;