0

私は2つのエンティティを持っています:

  • 属性 accountId を含むアカウント
  • 属性 runId を持つ ImportRun。ImportRun から Account へは 1 対多 (双方向) の関係があります。

同じ accountId を持つ複数のアカウントが、異なる runId を持つ異なる ImportRun を参照する可能性があります (たとえば、1 日あたり 1 つ)。

特定の一連の accountIds (休止状態のエンティティ キーではなく一種のビジネス キー) の最新の runIds を取得したい、またはさらに良いことに、それぞれが最新の既存の ImportRun を参照する一連のアカウントを取得したい (そのため、この ImportRun の runId は、この accountId を持つアカウントによって参照されるすべての ImportRun の中で最も高い runId を持ちます)。つまり、最新のアカウントを取得したいのです。残念ながら、私はネイティブ SQL を使用できません。JPQLを使用して、指定されたaccountIdを1つだけ使用して、この種のことをすでに行うことができましたが、すべてのrunIdの最大結果を複数の指定されたaccountIdでグループ化する方法がわかりません。

JPQLでこれを行うにはどうすればよいですか?

4

1 に答える 1

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)

お役に立てれば!

于 2013-04-29T17:50:05.550 に答える