2012-02-14 5 views
2

Userは、1対1であり、Carである。しかし、Userには常にCarが含まれているとは限りません。Hibernate - ヌルでない場合にのみプロパティをフェッチする方法は?

query = session.createQuery("select u from User as u join fetch u.car"); 

私は自動車を持っているユーザーしかいません。このクエリを変更してすべてのユーザーを取得するにはどうすればよいですか?

私はセッションの外でuser.carが必要なので、フェッチを使用していますが、私はこれをやっていますか?

ありがとうございました。

+0

SQLクエリは、テキストメッセージのように見えることは。 – cheeken

+0

どういう意味ですか? – bunnyjesse112

+0

"u"のすべてを使って、それは文字メッセージのように見えます。 – cheeken

答えて

7

便宜的に設計されたleft joinを使用してください。

query = session.createQuery("select u from User as u left join fetch u.car"); 
+0

ありがとうございます! – bunnyjesse112

2

あなただけのすべてのユーザーを取得したい場合は、しない理由を次のようにします。

List users = session.createCriteria(User.class).list(); 

をお使いのユーザークラスが車にマップされている場合は、返されるユーザーオブジェクトは、関連付けられた車のデータを持っていますHibernateはこのデータを自動的に返します(モードに応じて、遅延ロードされている可能性があります。つまり、使用しようとすると実際のCatデータのみを取得します)。

+0

返信いただきありがとうございます! – bunnyjesse112

1

結果に車が必要ですか?それ以外の場合は、 "ユーザーuから選択する"ジョブを行う必要があります。

carをnullにすることはできますが、carを取得する必要がある場合は、「フェッチするuをユーザから選択してください。 希望の構文です。外部結合は、NULL関係でも結果を確実に取得します。この場合、結合フェッチで十分です。

いくつかのより多くの(と作業)の例(「参加フェッチ」)Hibernateのドキュメントであります。http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/

+0

お返事ありがとうございます! – bunnyjesse112

関連する問題