我有一个对象列表
@ManyToMany(Fetch=FetchType.Lazy)
@JoinTable(...inverseJoin....)
public list<objects> getList()
执行dto.merge时,我可能不想初始化它。
Hibernate将自动删除所有关系,即使我没有指定delete_orphan。
我是否知道如何防止hibernate删除orphans又称关系?
目前,我必须在进行合并之前从DB中检索/设置列表。
答案 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之间的关联,那么应该自动删除子实体本身。