0

我有一个对象列表

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

我可能不想在执行 dto.merge 时对其进行初始化。

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

我可以知道如何防止休眠删除孤儿又名关系吗?

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

4

1 回答 1

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);

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

于 2012-06-19T09:44:49.920 回答