我有一个对象列表
@ManyToMany(Fetch=FetchType.Lazy)
@JoinTable(...inverseJoin....)
public list<objects> getList()
我可能不想在执行 dto.merge 时对其进行初始化。
Hibernate 会自动删除所有的关系,即使我没有指定 delete_orphan。
我可以知道如何防止休眠删除孤儿又名关系吗?
目前我必须在进行合并之前从数据库中检索/设置列表。
我有一个对象列表
@ManyToMany(Fetch=FetchType.Lazy)
@JoinTable(...inverseJoin....)
public list<objects> getList()
我可能不想在执行 dto.merge 时对其进行初始化。
Hibernate 会自动删除所有的关系,即使我没有指定 delete_orphan。
我可以知道如何防止休眠删除孤儿又名关系吗?
目前我必须在进行合并之前从数据库中检索/设置列表。
该列表是实体状态的一部分,因为实体是关联的所有者。
因此,如果您合并一个在 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);
请注意,您的问题与删除孤儿无关。删除孤儿意味着:如果我删除了父子实体之间的关联,那么子实体本身应该被自动删除。