Spring Data搭配Hibernate5.3.2用JPQL关联无关系实体报错如何解决
问题根因
- JPQL关键字冲突:你的实体所在包名以
in开头,若在JPQL中写了实体的全限定名,in作为JPQL的保留关键字,会被Hibernate语法解析器识别为语法标记而非包名的一部分,直接触发语法异常。 - 关联查询语法错误:JPQL中
WITH关键字仅用于为已配置映射关系(如@OneToMany/@ManyToOne)的关联查询附加额外过滤条件,关联两个未配置实体映射关系的表时,不可使用WITH关键字。
解决方案
- 避免在JPQL中写实体的全限定名:直接使用实体的简单类名即可,Hibernate会自动识别已扫描的实体类,不需要写完整包路径,可直接规避
in关键字冲突。 - 修正关联查询语法,以下两种写法均可适配你的Hibernate 5.3版本:
- 写法一:使用笛卡尔积+WHERE条件(兼容所有JPA版本)
select t from MdmVehicle t, MdmVehicleGateInOut g where g.vehicleNumber = t.number- 写法二:使用JPA 2.1+支持的JOIN ON语法
select t from MdmVehicle t join MdmVehicleGateInOut g on g.vehicleNumber = t.number
内容的提问来源于stack exchange,提问作者Techie Manoj
相关产品推荐
相关产品推荐

