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

JPQL query with count function on an association field

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

[...] The path expression argument to COUNT may terminate in either a state field or a association field, or the argument to COUNT may be an identification variable. (JSR 338, section 4.8.5)

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

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

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

Jet 如果我尝试作为 JPA 提供程序在 Hibernate (4.3.11) 上执行语句,它会失败(即 SQLGrammarException),但 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 函数