在关联字段上使用计数函数的 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
函数
如 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
函数