Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

hibernate...継承関係のあるエンティティのJOINについて

お世話になっております。コロです。
java本来の質問では無いので申し訳ないのですが、

現在継承関係のある4つのクラス
A(親)
B、C、D(子クラス)
idを共有しています。
(Aクラスの、
    @Id
    @GeneratedValue(strategy =GenerationType.IDENTITY)
    private Long id;
を、継承することによって4つのエンティティクラスがかぶらないidを持つ)


上記継承クラス同士のINNER JOINのhqlを作成しているのですが・・・
QuerySyntaxExceptionをどのように解決したらよいのか判りません。

Enumのステートによって、
AテーブルにBテーブルをinnerjoin
AテーブルにCテーブルをinnerjoin
AテーブルにDテーブルをinnerjoin
させようと考えています。

現在のhqlでは、以下のようになっています。
BテーブルをAテーブルにINNER JOINする時

[SELECT * FROM A AS a INNER JOIN B AS b ON a.id=b.id  WHERE 1=1 ]
WHERE 1=1は全一致のために付与しております。
(他のステートが有効になっていると、
ANDで他の条件がくっつきます)

上記のようにすると、
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ON near line 1, column 174
となり、
ONがダメなのか・・・と、
ON以降を消してみたり、
ASを消してみたりと、
色々試行錯誤したのですが解決できませんでした。


hqlの記述についてご助言いただけないでしょうか。
宜しくお願いします。

2

回答

83906

閲覧

2件の回答

評価

0

大事なことを記述し忘れました。
Aクラスはエンティティとして扱いたいので、
アノテーション
@MappedSuperclass
を省いています。

@MappedSuperclassを省いたことと今回の件が結びつくのかまだ理解が浅く判らないのですが・・・

評価

0

【自己解決しました】

join句をstateで分けるのではなく、
fromを分ける方法で解決しました。

子クラスエンティティから親クラスエンティティは
参照できるようになっている
(@Inheritance(strategy = InheritanceType.JOINED)
ので、この方法が現在取れる最良の手段かなと考えております。

#他にももっと良い方法があるのかもしれませんが・・・

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。