如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
函数自己