JPQL查询与计数函数的关联字段



如JPA 2.1规范中所述,count函数可以应用于select子句中的关联字段:

[…COUNT的路径表达式参数可以在状态字段或关联字段中终止,或者COUNT的参数可以是一个标识变量。(JSR 338, section 4.8.5)

所以我希望这样的查询是有效的JPQL:

SELECT count(i.courses) FROM Instructor i GROUP BY i

(教师实体与课程实体具有双向的一对多关系)

Jet如果我尝试在Hibernate(4.3.11)上执行语句作为JPA提供者,它会失败(即sqlgrammareexception),但EcplipseLink可以执行它。那么是Hibernate不兼容还是我弄错了?

JPQL获取集合字段大小的正确方法是使用

SELECT SIZE(i.courses) FROM Instructor i GROUP BY i

您所声明的JPQL很可能是不可移植的,因为JPQL BNF说

aggregate_expression ::= { AVG | MAX | MIN | SUM } ([DISTINCT] state_field_path_expression) |
    COUNT ([DISTINCT] identification_variable | state_field_path_expression |
    single_valued_object_path_expression)

,它不包括collection_valued_path_expression表达式,所以我将使用SIZE函数自己

最新更新