java – 使用JPQL计算关联对象的正确方法

前端之家收集整理的这篇文章主要介绍了java – 使用JPQL计算关联对象的正确方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
编写此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

解决方法

要严格回答问题的标题,请使用SIZE:
Query query=em.createQuery("select m from Meeting m where size(m.attendees) = 0");
return query.getResultList();

从JPA规范:

4.6.16.2 Arithmetic Functions

06001

The ABS function takes a numeric
argument and returns a number
(integer,float,or double) of the
same type as the argument to the
function.

The SQRT function takes a numeric
argument and returns a double.

The MOD function takes two integer
arguments and returns an integer.

The SIZE function returns an integer
value,the number of elements of the
collection. If the collection is
empty,the SIZE function evaluates to
zero.

Numeric arguments to these functions
may correspond to the numeric Java
object types as well as the primitive
numeric types.

在0的特定情况下,您还可以使用IS EMPTY

4.6.11 Empty Collection Comparison Expressions

The Syntax for the use of the
comparison operator IS EMPTY in an
empty_collection_comparison_expression
is as follows:

06002

This expression tests whether or not
the collection designated by the
collection-valued path expression is
empty (i.e,has no elements).

Example:

06003

If the value of the collection-valued
path expression in an empty collection
comparison expression is unknown,the
value of the empty comparison
expression is unknown.

我会测试两者以确定哪一个是最有效的(检查查询计划).

猜你在找的Java相关文章