【问题标题】:JPQL Select Entity and Get count on collection that belongs to selected entityJPQL 选择实体并获取属于所选实体的集合的计数
【发布时间】:2014-02-11 21:26:24
【问题描述】:

我有一个实体 A 和 B 元素的集合。

我想创建一个基本上这样做的查询:

Select a, count(b) from A a  inner join fetch a.b b group by a

我希望得到一个数组对象,其中元素 0 是我的 A 实体,元素 1 是一个数字,它是集合中的数字。

Jpa(由 hibernate 支持)抛出以下错误:

Caused by: java.sql.SQLException: Not in aggregate function or group by clause:   org.hsqldb.Expression@16d829b1 in statement (sql query)

当我将本地 sql 从错误中复制并粘贴到 postgres 中时,它不起作用。

当我从以下 JPQL 查询中复制并粘贴本机 sql 时:

Select a, count(b) from A a  inner join fetch a.b b group by a, b

Postgres 返回预期结果。问题是 Hibernate 仍然会出现与第一个 Query 相同的错误。

【问题讨论】:

  • 您的查询没有意义。如果您按 a, b 分组,计数显然是 1,因为每个 [a, b] 行都将与所有其他行不同。也就是说,即使你修复了查询,你也会被hibernate.atlassian.net/browse/HHH-1615
  • 这个错误看起来确实像我遇到的问题,但 Zaroual Mohamed 的查询确实有效

标签: java hibernate jpa


【解决方案1】:

试试这个:

SELECT DISTINCT a, a.b.size FROM A a INNER JOIN FETCH a.b b 

【讨论】:

  • 这基本上可以工作,但如果我有 2 个 A 和 1 个 B,一个有 4 个 B,我会返回 5 个对象。前 4 个看起来像 Object[]{A, 4},最后一个看起来像 Object[]{B, 1}
  • 我编辑了查询。请尝试新版本并告诉我们它是否有效:)
  • 很简单,你有 5 个 B,你正在查询 A 加入所有 B,所以你有 5 行。要消除重复,请添加 ''DISTINCT' 关键字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多