一尘不染

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

hibernate

我尝试生成一个HQL查询,其中包括带有空Appoinment集合(由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(), ISNULL

但仍然不是我想要查看的结果或HQL或SQL SERVER中的某些错误

注意:

没有JOIN的查询有效:

"FROM User u WHERE u.status = 1 AND size(u.appointments) = 0"

解决了

另一个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

阅读 486

收藏
2020-06-20

共1个答案

一尘不染

使用IS EMPTY应该可以(我希望使用JPQL语法):

SELECT u FROM User u WHERE u.status = 1 AND u.appointments IS EMPTY

如果没有,请显示生成的SQL。

参考文献

  • Hibernate Core参考指南
  • JPA 1.0规范
    • 第4.6.11节“空集合比较表达式”
2020-06-20