获取JPQL中另一个表的MAX组结果

时间:2013-04-29 15:15:47

标签: sql hibernate jpa jpql

我有两个实体:

  • 帐户,包含属性accountId
  • ImportRun,具有runId属性。 从ImportRun到Account有一对多(双向)关系。

可以使用具有相同accountId的多个帐户引用具有不同runIds的不同ImportRuns(例如,每天一个)。

我想获取一组给定的accountIds(这是一种业务密钥,而不是hibernate实体密钥)的最新runIds,或者更好的是,一组帐户,每个帐户都引用最新的现有ImportRun (以便此ImportRun的runId具有所有ImportRuns的最高runId,该帐户使用此accountId引用)。换句话说:我想获得最新的账户。 不幸的是,我不能使用原生SQL,那么它将非常容易。我已经设法用一个给定的带有JPQL的accountId来做这种事情,但是我无法弄清楚如何用几个给定的accountId对每个runId的最大结果进行分组。

我如何使用JPQL执行此操作?

1 个答案:

答案 0 :(得分:2)

下次包含代码,但要获取给定帐户ID集的最新运行ID:

SELECT a.accountId, MAX(r.runId) FROM Account a INNER JOIN a.importRun r WHERE a.accountId IN :accountIds GROUP BY a.accountId

使用这个混乱的JPA查询来获取最新帐户的列表:

SELECT a FROM Account a INNER JOIN a.importRun r WHERE r.runId = (SELECT MAX(ri.runId) FROM Account ai INNER JOIN ai.importRun ri WHERE ai.accountId = a.accountId)

希望这有帮助!