要严格回答问题的标题,请使用SIZE
:
Query query=em.createQuery("select m from Meeting m where size(m.attendees) = 0");
return query.getResultList();
从 JPA 规范:
4.6.16.2 算术函数
functions_returning_numerics::=
ABS(simple_arithmetic_expression) |
SQRT(simple_arithmetic_expression) |
MOD(simple_arithmetic_expression, simple_arithmetic_expression) |
SIZE(collection_valued_path_expression)
ABS 函数接受一个数字参数并返回一个与函数参数类型相同的数字(整数、浮点数或双精度数)。
SQRT 函数接受一个数字参数并返回一个双精度值。
MOD 函数接受两个整数参数并返回一个整数。
SIZE 函数返回一个整数值,即集合的元素数。如果集合为空,则 SIZE 函数的计算结果为零。
这些函数的数字参数可能对应于数字 Java 对象类型以及原始数字类型。
在特定情况下0
,您还可以使用IS EMPTY
4.6.11 空集合比较表达式
IS EMPTY
在
empty_collection_comparison_expression中使用比较运算符的语法
如下:
collection_valued_path_expression IS [NOT] EMPTY
该表达式测试集合值路径表达式指定的集合是否为空(即没有元素)。
例子:
SELECT o
FROM Order o
WHERE o.lineItems IS EMPTY
如果空集合比较表达式中集合值路径表达式的值未知,则空比较表达式的值未知。
我会测试两者以查看哪个最有效(检查查询计划)。