2016-05-28 1 views
0

I持って、次のクラス:基準APIを使用して異なるテーブルで1つのテーブルを結合するにはどうすればよいですか?

class A { 
    private B b; 
    // getters/setters 
} 
class B { 
    private C c; 
    private D d; 
    // getters/setters 
} 
class C { 
    private boolean outdated; 
    // getters/setters 
} 
class D { 
    // not important fields 
    // getters/setters 
} 

クラスBは、関係 '一対一' とA、C及びDに接続されています。

基準apiで次の表を結合しようとしています。

私は次のコードしている:

Root<A> root = query.from(A.class); 
root.join(A_.b) 
    .join(B_.c) 
    .join(B_.d); 

をしかし、CIとBを接合した後のフィールドを使用することはできませんので、残念ながらこのコードは、私は「.join(B_.d)」をライン上のエラーが表示されますが、コンパイルされません参加のためのBの。

このような結合をしたいのは、エンティティCが古くなっていないという条件が必要なためです(このため、 'on'条件を追加します)。

誰もこの問題を解決する方法を知っていますか?

答えて

1

root.join(A_.b).join(B_.c)Cを表しますので、"B_.d"に参加する方法はありません。

Root<A> root = query.from(A.class); 
Join<A,B> bJoin = root.join(A_.b); 
bJoin.join(B_.c); 
bJoin.join(B_.d); 
+0

あなたは基準apiの結合が不変ではないので、すべての結合を別々の変数に移動して、それらを独立して操作することができます。 – ruslan5t

関連する問題