2017-05-02 5 views
0

に参加します。は、私はクラスの属性として、2つのエンティティを持つことになります非エンティティクラスの2つのエンティティを、参加したい非エンティティクラスの2つのエンティティ

は、一例として、これを持っ:

@Entity 
public class A { 
} 

@Entity 
public class B { 
} 

public class C { 
    private A a; 
    private B b; 
} 

を私はSqlResultSetMappingを使用して解決策を見つけたが、私は20+の列があるだろうbeacause手動で、AとBの各列を指定する必要はありません。

結果[0] A、結果[1] B.

マイideeaだっされるIが見つかった他の溶液、Object配列の結果を返すJPQLクエリを使用することでした[]、 AとBの両方が私の問題を解決するための最良の方法である、複数の列を持っていることを考えると

@SqlResultSetMapping(targetClass=C.class, 
entities={ 
@EntityResult (targetClass=A.class) 
@EntityResult (targetClass=B.class) 
} 

:両方と私はこのようにそれを見るの組み合わせ?

答えて

0

あなたはJPQLを(そして、それはまた、休止状態で動作するはずです)を使用している場合は、ResultSetクラスの戦略を活用することができます。

1)あなたのCクラスにコンストラクタを追加します。

public C(A aEntity, B bEntity){ 
    this.a = aEntity; 
    this.b = bEntity; 
} 

2)は、通常のクエリを作成し、そのコンストラクタの引数としてAとBを取ると、完全修飾Cクラス名を持つnew演算子を使用します。

Query query = session.createQuery("select new com.mypkg.C(a as aEntity, b as bEntity) 
            from A a, B b where a.id = b.a_id"); 
List<C> cList = (List<C>)query.list(); 
+0

は私が取得: '行1:156:予期しないトークン: –

+0

A'私の更新例 –

+0

それでも同じ問題を試してみてください。これが有効な例であると確信していますか? –

関連する問題