Hibernate:在子选择查询中使用 IN 子句时出现错误
Posted
技术标签:
【中文标题】Hibernate:在子选择查询中使用 IN 子句时出现错误【英文标题】:Hibernate : stange error when using the IN clause in sub select query 【发布时间】:2017-04-14 09:25:13 【问题描述】:使用休眠 4.3.11.final.
我们使用 @Query 注释发出请求,其中我们在子选择查询 ex 中使用 in 子句:
select distinct doc from DocumentType doc join doc.usages u where u.institute not in :institutes and doc.id not in (select distinct doc1.id from DocumentType doc1 join doc1.usages u1 where u1.institute in :institutes)
第一个 in 子句正确生成(添加了括号),但子选择中的那个不是。
生成的sql是:
select distinct doc from fr.itce.pen.model.customer.folder.DocumentType doc join doc.usages u where u.institute not in (:institutes_0_, :institutes_1_) and doc.id not in (select distinct doc1.id from fr.itce.pen.model.customer.folder.DocumentType doc1 join doc1.usages u1 where u1.institute in :institutes_0_, :institutes_1_)]
一种解决方法是在声明的查询中用括号将部分括起来:
select distinct doc from DocumentType doc join doc.usages u where u.institute not in :institutes and doc.id not in (select distinct doc1.id from DocumentType doc1 join doc1.usages u1 where u1.institute in (:institutes))
有没有更好的方法让它工作,和/或在最近的休眠版本中修复了这个“错误”?我查看了休眠问题,但找不到有关此行为的任何信息。
最好的问候。
【问题讨论】:
在我看来我被hibernate.atlassian.net/browse/…咬了 【参考方案1】:也许这是一个错误,但不会在 4.3 中修复。
您需要使用测试用例在 5.2 上复制它并打开 Jira 问题。
【讨论】:
嗯,我们将 List这是一个错误,已在 hibernate 5.2 中更正。
【讨论】:
以上是关于Hibernate:在子选择查询中使用 IN 子句时出现错误的主要内容,如果未能解决你的问题,请参考以下文章
在 Hibernate 3.2.2 的本机 sql 查询中使用 IN 子句
sql面试题_SQl优化技巧_1注意通配符中like的使用,百分号放后面_2避免在where子句中对字段进行函数操作_3在子查询当中,尽量用exists代替in_4where子句中尽量不要使用(代码片
如何在子查询的 WHERE 子句中使用来自 UNNEST 的多个值?