1

私はこのようなオブジェクトツリーを持っています:

Foo->(Many)Bar-> Baz

それらをすべて一時的にしたいのですが、Fooでdetachを呼び出すと、Fooがデタッチされるだけです。また、セッションには他に残しておく必要があるものがある可能性があるため、セッションをクリアしたくありません。

ツリー全体をスパイダリングせずに処理する方法はありますか?または、Fooをロードした元のクエリに、返されたオブジェクトはどれもアタッチされるべきではないと言う方法はありますか?

4

1 に答える 1

0

Hiberante の detach メソッドはまさにこれを行います:

public void detach(Object entity) {
    try {
        getSession().evict( entity );
    }
    catch ( HibernateException he ) {
        throw convert( he );
    }
}

多かれ少なかれ似ています: 既にオブジェクトを持っているので、セッションからオブジェクトを削除して切り離してみましょう。あなたができることはEVICT、このプロパティにFooカスケードするBarことですBaz。回避LazyInitializationExceptionするために、それらがすべてロードされていることを保証する必要があります(おそらくFetchType EAGER?)


DETACH3.5 の場合、この目的に使用できるCascadeType があります: http://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/annotations/CascadeType.html

于 2012-06-30T13:58:15.543 に答える