如JPA 2.1规范中所述,count函数可以应用于select子句中的关联字段:
[...] COUNT的路径表达式参数可以在状态字段或关联字段中终止,或者COUNT的参数可以是标识变量。 (JSR 338,第4.8.5节)
所以我希望这样的查询是有效的JPQL:
SELECT count(i.courses) FROM Instructor i GROUP BY i
(讲师实体与课程实体具有双向一对多关系)
Jet如果我尝试在Hibernate(4.3.11)上执行语句作为JPA提供程序失败(即SQLGrammarException),但EcplipseLink可以执行它。那么Hibernate不合规还是我弄错了?
答案 0 :(得分:0)
获取集合字段大小的正确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
函数