2012-03-28 17 views
14

2つのJPAエンティティをプロパティの2つに結合する必要があります。 私は休止状態を使用していますが、しかし、このJPA EntityManagerを使用して2つの関連しないテーブルを結合します。

select foo, bar from FooEntity as foo, BarEntity as bar 
where foo.someothercol = 'foo' and foo.somecol = bar.somecol 

などのHQLクエリを使用することができ、私は、Hibernateの依存を避け、代わりに、EntityManagerを使用します。 助けてください。

答えて

19

クエリは有効なJPQLで、Hibernate固有の機能は使用されません(barとfromの間に空白があります)。 JPA 2.0仕様(4.4.5ジョイン)これは、次の言葉で説明されている:

内暗黙FROM句でデカルト 製品の使用によって指定することができる参加してWHERE句に結合条件。 結合条件がない場合、これはデカルト座標系の になります。

この一般化された結合スタイルの主な使用例は、 結合条件に、エンティティ関係にマップされた の外部キー関係が含まれていない場合です。例:顧客CからのSELECT C、

従業員の電子WHERE c.hatsize = e.shoesize

クエリへの主な違いは、あなたの選択は、エンティティの2種類が含まれていることです。クエリの結果はオブジェクトのリスト[]です。配列内の要素の順序は、select ステートメントの場合と同じです。あなたの場合の作品に続いて:

String query = 
    "select foo, bar from FooEntity as foo, BarEntity as bar "+ 
    "where foo.someothercol = 'foo' and foo.somecol = bar.somecol"; 
List<Object[]> results = em.createQuery(query).getResultList(); 

for (Object[] fooAndBar: results) { 
    FooEntity foo = (FooEntity) fooAndBar[0]; 
    BarEntity bar = (BarEntity) fooAndBar[1]; 
    //do something with foo and bar 
} 
+0

バーとの間にスペースがありませんでした。 –

関連する問題