JPA/Hibernate-将一个实体与子实体分离



我使用的是带有Hibernate 3.6.8的JPA2作为实现。

假设我们有一个实体Foo

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

我需要将整个实体图从会话中分离出来,当我执行entityManager.detach(foo)时,我很惊讶bar仍然是附加的,这与IMO的直觉背道而驰。

阅读EntityManager上的文档,这似乎是预期的情况,因为它没有提到任何关于关联/子实体的内容:

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

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

有没有什么方便的方法可以在不进行反思的情况下实现这一点?

添加类型为DETACH:的级联

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

最新更新