Hibernate中带Order By子查询的SQL转HQL实现问题咨询
HQL改写解决方案
问题排查
你编写的HQL存在两处核心错误:
- 字段类型不匹配:原SQL中
deletedBy为存储用户ID的数值字段,并非布尔类型,d.deletedBy = true的写法会触发类型校验失败 - 子查询兼容性问题:低版本Hibernate不支持直接在
ORDER BY子句中使用关联子查询,容易触发语法解析错误
可行改写方案
方案1:保留子查询逻辑的修正版
仅修正字段判断错误即可运行,适配高版本Hibernate:
hql = "from DOCUMENTS d where d.isdeleted = 1 and d.deletedBy = 1 ORDER BY (select ue.firstname from Users ue where d.createdBy = ue.dkey) asc";
如果你的DOCUMENTS实体类中isdeleted字段映射为布尔类型,可将d.isdeleted = 1替换为d.isdeleted = true
方案2:更推荐的JOIN关联写法
通过关联查询替代子查询,兼容性更强、执行效率更高:
hql = "select d from DOCUMENTS d left join Users ue on d.createdBy = ue.dkey where d.isdeleted = 1 and d.deletedBy = 1 order by ue.firstname asc";
内容的提问来源于stack exchange,提问作者FatimaHamieh
相关产品推荐
相关产品推荐

