2012-01-18 11 views
4

私は実装としてHibernate 3.6.8とともにJPA 2を使用しています。JPA/Hibernate - 子と一緒にエンティティをデタッチする

我々は実体を持っているとしましょうFoo

私はセッションからエンティティ全体のグラフを取り外す必要がある、と私は entityManager.detach(foo)を行うとき、私はIMOはかなりカウンター直感的である、 barが付着したままということに驚きました
@Entity 
public class Foo { 
    .... 
    @OneToOne 
    private Bar bar; 

    .... 
} 

EntityManager上のドキュメントを読ん

、団体/子entitesについては何も言及していないので、これは予想される場合であることが表示されます:

管理エンティティを引き起こし、永続コンテキストから指定されたエンティティを削除します切り離される。エンティティの削除(エンティティの削除を含む)があった場合、そのエンティティに対して行われたフラッシュされていない変更は、データベースに同期されません。以前に分離されたエンティティを参照したエンティティは、それを引き続き参照します。

私は単純にentityManager.detach(foo.getBar())を呼び出すこともできますが、後でアソシエーションを追加すると、それらも手動で切り離されていることを確認する必要があります。

リフレクションに頼ることなくこれを達成する便利な方法はありますか?

答えて

7

型DETACHのカスケードを追加します。もちろん

@OneToOne(cascade = CascadeType.DETACH) 
private Bar bar; 
+0

...美しい:)を。 JBに感謝します。 – Asa

関連する問題