Java JPA在成员集合上使用聚合函数选择新建
我有一个类似以下的问题:Java JPA在成员集合上使用聚合函数选择新建,java,jpa,jpql,Java,Jpa,Jpql,我有一个类似以下的问题: Select new mypackage.MyClass( u, max(sc.serviceDate)) from Unit u left join u.serviceCalls sc where u.organization.key = :organizationKey 因此,我的映射是我有一个单元,它有一个ServiceCalls集合(FetchType.LAZY),还有一个组织。每个ServiceCall都有一个serviceDate 在我的查
Select new mypackage.MyClass( u, max(sc.serviceDate))
from Unit u left join u.serviceCalls sc
where u.organization.key = :organizationKey
因此,我的映射是我有一个单元,它有一个ServiceCalls集合(FetchType.LAZY),还有一个组织。每个ServiceCall都有一个serviceDate
在我的查询中,我想选择整个单元,但不是所有serviceCalls。我想获取最近的serviceDate(如果存在)
尝试在postgres上通过eclipselink执行查询会得到以下结果(我从查询输出中删除了一些选定字段)
看起来max应用于所有服务调用,而不是为每个单元获取max。有什么方法可以做到这一点,还是我只需要访问所有服务呼叫,然后通过这种方法获得最大值?您是否需要一个u分组(在最后?)。这并不像事后看来的那么明显。你可能真的认为,像
select u,count(u.serviceCalls)这样的东西在没有分组依据的情况下是合法的,因为分组是什么是显而易见的(这不是你的例子,但已经不远了)。但事实并非如此。我们应该写信给JPA规范维护委员会投诉。哇,你让我感觉好多了。再次感谢你在这方面的帮助,我终于能够继续前进了。
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))