HQL 查询检查集合大小是否为 0 或空

2023-12-24

我尝试生成一个 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
    • 第 4.6.11 节 “空集合比较表达式”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HQL 查询检查集合大小是否为 0 或空 的相关文章

随机推荐