2011-11-09 17 views
1
  • アカウントは、多くの支払い(paymentType、日付)
  • は、アカウントは多くの手紙(letterType、日付)
  • あなたはそれぞれ、少なくとも5を持つ、万個のアカウントを持っていました支払いと手紙。

paymentType = 'check'、lettertype = 'mail'のすべてのアカウントを返すクエリは何ですか?JPA連合は親オブジェクト上の2つの@OneToManyコレクションに

もう1つの方法は、支払いと手紙に関する2つのクエリを行い、それらを追加することですが、私は(SpringBatch)を使用しているAPIの性質上、私はAbstractJpaQueryProviderの 'Query'だから私はむしろ私はこのインターフェイスを使用する各サービスのプロパティにキャストする必要がありますオブジェクトより返されるアカウントのコレクションを持っているだろう。

答えて

1

あなたは自分の子レコードに適用されるいくつかの基準に基づいて、親レコードをフィルタ処理しようとしている場合、これが回避されます

select a from Account 
where exists(select p from Payment where p.account = a and p.paymentType='check') 
and exists(select l from Letters l where l.account = a and l.letterType='mail') 

のように、「存在する」という表現を使用する方がよいかもしれません複数の@OneToManyによって導入されたデカルト結合問題は、単一のクエリでナビゲーションを結合します。

も参照してください: http://download.oracle.com/docs/cd/E16764_01/apirefs.1111/e13046/ejb3_langref.html#ejb3_langref_exists

1
select a from Account a join a.payments p join a.letters l where p.paymentType='check' and l.letterType='mail' 
+0

感謝を。私は、実際にはPaymentsとLettersの "UNION"が必要なので、クエリはコレクションオブジェクトレベルで実行する必要があります。上記と同等のものは何でしょうか? – pritam

関連する問題