在关联字段上使用count函数的JPQL查询

时间:2016-10-03 18:21:09

标签: hibernate jpa jpql

如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不合规还是我弄错了?

1 个答案:

答案 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_pa​​th_expression表达式,因此我将自己使用SIZE函数

相关问题