升级Hibernate与Spring Data后JPA查询QuerySyntaxException报错求助
问题排查与解决
错误根源
从报错堆栈的QuerySyntaxException: Invalid path: 'studentBO.isDeletedFromSync'可以明确:HQL查询中实体别名大小写不一致。
你在查询里同时使用了两种别名写法:studentBo(驼峰小写B)和studentBO(大写B),升级后的Hibernate对HQL别名的大小写敏感性提升,不再允许这种不一致的写法,导致无法识别字段路径。
另外你调整后的查询还存在逻辑错误:把studentBO.isDeletedFromSync的条件放到了UserBO的子查询里,但这个字段属于StudentBO,不属于UserBO,所以即使大小写改对了,逻辑上也不成立。
修正后的查询语句
统一别名大小写,并将isDeletedFromSync的条件放回StudentBO的查询层级:
@Query("select grade.gradeName from GradeBO grade where grade.gradeName <> '' and grade in (select studentBo.gradeBO from StudentBO studentBo where studentBo.id in(select userBo.id from UserBO userBo where userBo.role='STUDENT' and userBo.active=:isActive and userBo.schoolBO.id=:schoolId) and (studentBo.isDeletedFromSync is null or studentBo.isDeletedFromSync=false))") List<String> getActiveGrades(@Param("schoolId") Long schoolId, @Param("isActive") Boolean isActive);
关键修正点
- 所有引用
StudentBO的别名统一为studentBo(你也可以统一用studentBO,只要全查询里写法完全一致即可) - 将
isDeletedFromSync的判断条件留在StudentBO的子查询块中,因为该字段是StudentBO的属性,不能放到UserBO的子查询范围内
内容的提问来源于stack exchange,提问作者rob
相关产品推荐
相关产品推荐

