cor*_*ras 7 java orm hibernate jpa jpql
编写此JPA查询的正确方法是什么?我只是猜测,因为我无法解决它或在我的JPA书中找到它.
Query query=em.createQuery("select m from Meeting m where count(m.attendees) = 0");
return query.getResultList();
Run Code Online (Sandbox Code Playgroud)
我目前正在尝试使用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
Run Code Online (Sandbox Code Playgroud)
Pas*_*ent 11
要严格回答问题的标题,请使用SIZE
:
Query query=em.createQuery("select m from Meeting m where size(m.attendees) = 0");
return query.getResultList();
Run Code Online (Sandbox Code Playgroud)
从JPA规范:
4.6.16.2算术函数
Run Code Online (Sandbox Code Playgroud)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函数接受一个数字参数并返回一个double.
MOD函数接受两个整数参数并返回一个整数.
SIZE函数返回一个整数值,即集合的元素数.如果集合为空,则SIZE函数的计算结果为零.
这些函数的数字参数可以对应于数字Java对象类型以及原始数字类型.
在特定情况下0
,您也可以使用IS EMPTY
4.6.11空集合比较表达式
IS EMPTY
在 empty_collection_comparison_expression中使用比较运算符的语法 如下:Run Code Online (Sandbox Code Playgroud)collection_valued_path_expression IS [NOT] EMPTY
此表达式测试由集合值路径表达式指定的集合是否为空(即,没有元素).
例:
Run Code Online (Sandbox Code Playgroud)SELECT o FROM Order o WHERE o.lineItems IS EMPTY
如果空集合比较表达式中的集合值路径表达式的值未知,则空比较表达式的值是未知的.
我会测试两者以确定哪一个是最有效的(检查查询计划).
归档时间: |
|
查看次数: |
4838 次 |
最近记录: |