JPA / Hibernate - 与子项一起分离实体

时间:2012-01-18 07:35:59

标签: java hibernate jpa-2.0

我正在使用JPA 2和Hibernate 3.6.8作为实现。

假设我们有一个实体Foo

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

    ....
}

我需要从会话中分离整个实体图,当我entityManager.detach(foo)时,我感到惊讶的是bar依然存在,IMO非常直观。

阅读EntityManager上的文档,看来这是预期的情况,因为它没有提及关于协会/儿童的任何事情:

  

从持久性上下文中删除给定实体,导致托管实体脱离。对实体进行的未刷新更改(如果有)(包括删除实体)将不会同步到数据库。先前引用分离实体的实体将继续引用它。

我也可以简单地调用entityManager.detach(foo.getBar()),但这意味着如果我稍后添加任何关联,我将必须确保它们也是手动分离的。

有没有方便的方法来实现这一目标而不诉诸反思?

1 个答案:

答案 0 :(得分:7)

添加DETACH类型的级联:

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