2016-04-13 11 views
0

は、次のスキーマを考えてみましょうのみBここで、fieldB="someValue"JPA継承クエリ(Eclipseのリンク)

私は意気消沈させるために御馳走を使用しようとしましたが、B上のフィルタは、すべての親クラス(A)に取り組んでいるようです。

最初はこのようなクエリが可能ですか?

答えて

2

あなたはタイプによってフィルタリングする「タイプ」のキーワードでクエリを作成することができますし、Cエンティティをフィルタするサブクエリが存在する:

select a 
from A a 
where type(a) = :type 
or exists (
    select 1 
    from B b 
    where b.id = a.id 
    and b.fieldB = :fieldB 
) 

エンティティCのクラス型は、のsetParameterを使用メソッドを呼び出すことによって渡されますクエリインスタンス

+1

exists節には、ANDの代わりにANDを使用する必要があります。 – Chris

+0

クリス、私の愚かな間違いに感謝します。それを修正! –

+0

ええ、私はこの問題をsimilerアプローチで解決しましたが、それを解決するコマンドがあります。実際に私はメインクラスを継承5クラスを持って、私は各サブクラスで2 - 3フィルタを作っている。タイプを使用するか使用するとモンスターのクエリにつながります(それは確かにパフォーマンスに影響します) –

関連する問題