有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

共 (1) 个答案

  1. # 1 楼答案

    要严格回答问题的标题,请使用^{

    Query query=em.createQuery("select m from Meeting m where size(m.attendees) = 0");
    return query.getResultList();
    

    根据JPA规范:

    4.6.16.2 Arithmetic Functions

    functions_returning_numerics::=
    ABS(simple_arithmetic_expression) |
    SQRT(simple_arithmetic_expression) |
    MOD(simple_arithmetic_expression, simple_arithmetic_expression) |
    SIZE(collection_valued_path_expression)
    

    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:

    collection_valued_path_expression IS [NOT] EMPTY
    

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

    Example:

    SELECT o
    FROM Order o
    WHERE o.lineItems IS EMPTY
    

    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.

    我会测试这两种方法,看看哪一种效率最高(检查查询计划)