2011-06-10 9 views
0

を取り外し、私のコードは行く:Hibernateは良い練習私はHibernateのクエリを作成した後のオブジェクト

@SuppressWarnings("unchecked") 
List<SendCommands> list = query.list(); 
session.evict(list); 
if(list.isEmpty()) 
    return null; 
SendCommands dst = list.get(0); 
return dst; 

は、この例では「良い」の練習は何である:取り外し

1)(立ち退か)

@SuppressWarnings("unchecked") 
List<SendCommands> list = query.list(); 
if (list.isEmpty()) 
    return null; 
SendCommands dst = list.get(0); 
session.evict(dst); 
return dst; 
:最初、そのセットのオブジェクト、または

2)(取り外し追い出す)セットの最初のオブジェクトを返す結果セット全体、

+0

達成したいことは何ですか?なぜオブジェクトを切り離す必要がありますか? – axtavt

+0

オブジェクトを切り離して別のレイヤーに渡す必要があります。ドキュメントによれば、オブジェクトはトランザクションの終わりに失われ、なぜそれらを切り離したいのですか? – iliaden

答えて

2

オブジェクトをデタッチする必要はありません。休止状態のエンティティはPOJOであり、トランザクションの最後に失われることはありません。セッションが閉じられると、セッションは自動的に切り離されます。しかし、データが遅延読み込みとしてマークされ、エンティティがアタッチされている間にフェッチされていない場合を除き、引き続きそのデータを使用してデータにアクセスできます。

+0

ありがとう!レイジーローディングフィールドがあり、セッションが閉じられている場合にどうなるか教えてください。このフィールドはヌルポインタになりますか?あるいは、Hibernateは例外をスローしますか? また、オブジェクトをデタッチして戻したり、別の場所(同じセッション、別のスレッド)で更新した場合は、そのオブジェクトを更新してください。戻り値は変わるでしょうか? – iliaden

+0

LazyInitializationExceptionが発生します。 2つ目のquestioは実際には意味がありません。別のスレッド間で同じセッションを使用すべきではないからです。セッションはシングルスレッドです。この基本的な、しかし非常に重要なことは、Hibernateを使うときです。あなたは間違いなく、これがすべて記述されているhibernateリファレンスドキュメントを再検討すべきです:http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single –

関連する問題