Hibernate:在使用merge()时阻止删除orphan;

时间:2012-06-19 09:36:19

标签: hibernate

我有一个对象列表

@ManyToMany(Fetch=FetchType.Lazy)
@JoinTable(...inverseJoin....)
public list<objects> getList()

执行dto.merge时,我可能不想初始化它。

Hibernate将自动删除所有关系,即使我没有指定delete_orphan。

我是否知道如何防止hibernate删除orphans又称关系?

目前,我必须在进行合并之前从DB中检索/设置列表。

1 个答案:

答案 0 :(得分:4)

该列表是实体状态的一部分,因为该实体是该关联的所有者。

因此,如果您合并一个在bean中没有任何内容的分离实体,那么您将告诉Hibernate:这是实体的新状态,它不再包含任何对象。 很明显,Hibernate删除了实体与先前包含在列表中的对象之间的关联。

我的猜测是你构造一个新的实体实例并将其传递给merge(),而不是从会话中获取实体,修改它,然后将此实例传递给merge():

而不是:

SomeEntity e = new SomeEntity();
e.setId(34L);
e.setFoo("newFoo");
e = session.merge(e);
你应该这样做:

SomeEntity e = session.get(SomeEntity.class, 34L);
e.setFoo("newFoo");
// if the entity is detached:
e = session.merge(e);

请注意,您的问题与删除孤儿无关。删除孤儿意味着:如果我删除了paren和children之间的关联,那么应该自动删除子实体本身。