私はこのようなオブジェクトツリーを持っています:
Foo->(Many)Bar-> Baz
それらをすべて一時的にしたいのですが、Fooでdetachを呼び出すと、Fooがデタッチされるだけです。また、セッションには他に残しておく必要があるものがある可能性があるため、セッションをクリアしたくありません。
ツリー全体をスパイダリングせずに処理する方法はありますか?または、Fooをロードした元のクエリに、返されたオブジェクトはどれもアタッチされるべきではないと言う方法はありますか?
Hiberante の detach メソッドはまさにこれを行います:
public void detach(Object entity) {
try {
getSession().evict( entity );
}
catch ( HibernateException he ) {
throw convert( he );
}
}
多かれ少なかれ似ています: 既にオブジェクトを持っているので、セッションからオブジェクトを削除して切り離してみましょう。あなたができることはEVICT
、このプロパティにFoo
カスケードするBar
ことですBaz
。回避LazyInitializationException
するために、それらがすべてロードされていることを保証する必要があります(おそらくFetchType EAGER
?)
DETACH
3.5 の場合、この目的に使用できるCascadeType があります: http://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/annotations/CascadeType.html