编写此JPA查询的正确方法是什么?我只是猜测,因为我无法解决它或在我的JPA书中找到它。
Query query=em.createQuery("select m from Meeting m where count(m.attendees) = 0");
return query.getResultList();
我目前正在尝试使用Hibernate,我收到了一个mysql错误!
ERROR org.hibernate.util.JDBCExceptionReporter - You have an error in your
SQL syntax; check the manual that corresponds to your MySQL server version
for the right syntax to use near ')=0' at line 1
答案 0 :(得分:11)
要严格回答问题的标题,请使用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
如果集值的值 路径表达式在空集合中 比较表达未知, 空比较的价值 表达未知。
我会测试两者以确定哪一个最有效(检查查询计划)。