Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA在成员集合上使用聚合函数选择新建_Java_Jpa_Jpql - Fatal编程技术网

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))