2012-01-05 3 views
4

私は左外部結合でフェッチしている3つのテーブル/クラスを持っています。私は、次のクエリを実行している:createSQLQuery()を使用してテーブルを結合するとき、Hibernateがnullオブジェクトを返すことはできますか?

List<Object[]> l = session.createSQLQuery("SELECT a.*, b.*, c.* " + 
    " FROM (table_a a INNER JOIN table_b b ON a.some_id = b.some_id) " + 
    " LEFT OUTER JOIN table_c c ON c.some_id = a.some_id" 
).addEntity("a", A.class).addEntity("b", B.class).addEntity("c", C.class).list(); 

HibernateはCで非ヌル属性にNULL値を代入しようとして、AとBの行が存在するが、該当する行がCに存在しない場合、クエリが失敗した(私はこれらの属性をnullableに変更することはできません)。ヌル値を持つオブジェクトを作成しようとするのではなく、Cの行が存在しない場合、Cのヌルオブジェクトを返すような休止状態の設定はありますか?

+0

http://community.jboss.org/wiki/AShortPrimerOnFetchingStrategies。あなたは 'lazy = true'を設定しようとしましたか?これが役立つかどうかはわかりません。 –

+0

私は同様の問題に直面しています。あなたはこれに対する解決策を見つけましたか? – jabclab

答えて

0

もし私が間違っていなかったら。とにかくcがnullまたはnullでない場合、結果を取得しようとしています。

次のようにwhere句にこれを追加することができます。

and ((c.name=1234 and c.price=1234) or c.id is null) 
関連する問題