2

私が3つの抽象的なスーパークラスを持っていると仮定しましょう:SuperA、、。これらのスーパークラスのそれぞれに、より具体的な実装がたくさんあり、すべてのスーパークラスに。という注釈が付けられているとします。SuperBSuperC@Inheritance(strategy = InheritanceType.JOINED)

より具体的に:

  • Aa<-そして(プロパティ)SuperAのリストがあります。SuperBbbs
  • Bb<-そして(プロパティ)SuperBのリストがあります。SuperCccs
  • Cc<-SuperCそしてfooプロパティがあります。

foo次に、次のようなクエリを実行すると、タイプ内のプロパティが見つからないというエラーが発生しましたSuperCBb抽象型のリストがあり、それを変更することはできません。そのため、クエリを機能させる方法がわかりません。

select a from Aa a left outer join a.bbs b where b.ccs.foo = :foo

どんなヒントでも役に立ちます。前もって感謝します。


編集:

ところで:例外:

org.hibernate.exception.SQLGrammarException: Unknown column 'cc3_1_.foo' in 'where clause'


編集2:

JPAドキュメントを探して、Hibernateを使用していない場合に機能するものを見つけました。


編集3:

2つのSQLを使用するように変更します。まず、プロパティに基づいてCのIDを見つけ、foo次にIDと比較してクエリを実行します。

ここでの問題は、これが必要になるたびに2つのSQLを実行する必要があることです...しかし、少なくともそれは機能します。

4

1 に答える 1

2

Ccのリストには、もう1つ参加する必要があります。そうすれば、問題ないはずです。

select a from Aa a left outer join a.bbs b join b.ccs c where c.foo = :foo

ccsはリストであるため、この方法でプロパティを「逆参照」することはできません。結合が不要な場合は、単純に次のように記述できます。a.bbs.ccs.foo ただし、そうではないため、上記のようにリストに結合する必要があります。

于 2012-10-09T17:39:56.303 に答える