JPA在成员集合上选择具有聚合函数的new

时间:2011-05-14 22:33:50

标签: java jpa jpql

我有如下查询:

Select new mypackage.MyClass( u, max(sc.serviceDate))
    from Unit u left join u.serviceCalls sc
    where u.organization.key = :organizationKey

所以,我的映射是我有一个Unit,它有一个ServiceCalls(FetchType.LAZY)的集合,并且还有一个组织。每个ServiceCall都有一个serviceDate。

在我的查询中,我想选择整个Unit,但不是所有的serviceCalls。我想获取最新的serviceDate(如果存在)。

尝试通过postgres上的eclipselink执行查询得到以下内容(我从查询输出中删除了一些选定的字段)

Internal Exception: org.postgresql.util.PSQLException: ERROR: column "t0.key" must appear in the GROUP BY clause or be used in an aggregate function
  Position: 8
Error Code: 0
Call: SELECT t0.KEY, MAX(t1.service_date) FROM unit t0 LEFT OUTER JOIN service_call t1 ON (t1.unit_key = t0.KEY), organization t2 WHERE ((t2.KEY = ?) AND (t2.KEY = t0.organization_key))

看起来max正在所有服务调用中应用,而不是让每个单元的最大值。有没有办法做到这一点,或者我将不得不接受所有的服务电话并获得最大的收益?

1 个答案:

答案 0 :(得分:1)

你最后需要group by u吗?