2012-01-18 73 views
4

我使用JPA 2和Hibernate 3.6.8作爲實現。JPA /休眠 - 與兒童一起拆卸實體

比方說,我們有一個實體Foo

@Entity 
public class Foo { 
    .... 
    @OneToOne 
    private Bar bar; 

    .... 
} 

我需要從會話脫離整個實體圖,當我做entityManager.detach(foo),我感到驚訝的是bar保持附着,這IMO是相當直覺。

閱讀上EntityManager的文件,看來,這是因爲它沒有提及協會/兒童entites的任何預期的情況下:

從持久化上下文中刪除指定的實體,造成管理實體變得分離。對實體進行的未刷新更改(包括刪除實體)將不會同步到數據庫。先前引用分離實體的實體將繼續引用它。

我也可以簡單地調用entityManager.detach(foo.getBar()),但這意味着如果稍後添加任何關聯,我將不得不確保手動分離這些關聯。

有沒有方便的方法來實現這一點,而不訴諸反思?

回答

7

添加型DETACH的級聯:

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

當然......美麗的:)。謝謝JB。 – Asa 2012-01-18 10:36:09