我尝试生成一个 HQL 查询,其中包含具有空约会集合的用户(由 OneToMany 映射):
SELECT u FROM User u JOIN u.appointments uas WHERE u.status = 1 AND (uas.time.end < :date OR size(uas) = 0)
我尝试了几种方式(NOT EXIST ELEMENT(), IS NULL
)
另请参阅:如何在 NHibernate (HQL) 中检查集合是否为空? https://stackoverflow.com/questions/1105011/how-to-check-if-the-collection-is-empty-in-nhibernate-hql/1105057#1105057(这对我不起作用)
但仍然不是我想要看到的结果或者 HQL 或 SQL SERVER 中出现一些错误
Note:
没有 JOIN 的查询有效:
"FROM User u WHERE u.status = 1 AND size(u.appointments) = 0"
Solved
另一个 JOIN 解决了这个问题:
SELECT u FROM User u LEFT JOIN u.appointments pas1 LEFT JOIN pas1.slot t WHERE u.status = 1 AND t.end <= :date1 OR t.end IS NULL ORDER BY u.name asc
Using IS EMPTY
应该可以(我更喜欢 JPQL 语法):
SELECT u FROM User u WHERE u.status = 1 AND u.appointments IS EMPTY
如果没有,请显示生成的 SQL。
参考
- Hibernate Core Reference Guide
- 14.10。表达式 http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html
- JPA 1.0 specification
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)