我有两个实体:
可以使用具有相同accountId的多个帐户引用具有不同runIds的不同ImportRuns(例如,每天一个)。
我想获取一组给定的accountIds(这是一种业务密钥,而不是hibernate实体密钥)的最新runIds,或者更好的是,一组帐户,每个帐户都引用最新的现有ImportRun (以便此ImportRun的runId具有所有ImportRuns的最高runId,该帐户使用此accountId引用)。换句话说:我想获得最新的账户。 不幸的是,我不能使用原生SQL,那么它将非常容易。我已经设法用一个给定的带有JPQL的accountId来做这种事情,但是我无法弄清楚如何用几个给定的accountId对每个runId的最大结果进行分组。
我如何使用JPQL执行此操作?
答案 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)
希望这有帮助!