Hibernate 休眠:使用merge()时防止删除孤立项;

Hibernate 休眠:使用merge()时防止删除孤立项;,hibernate,Hibernate,我有一张物品清单 @ManyToMany(Fetch=FetchType.Lazy) @JoinTable(...inverseJoin....) public list<objects> getList() @ManyToMany(Fetch=FetchType.Lazy) @可连接(…反向连接…) 公共列表getList() 我可能不想在执行dto.merge时初始化它 Hibernate将自动删除所有关系,即使我没有指定delete\u orphan 我可以知道如何防止hi

我有一张物品清单

@ManyToMany(Fetch=FetchType.Lazy)
@JoinTable(...inverseJoin....)
public list<objects> getList()
@ManyToMany(Fetch=FetchType.Lazy)
@可连接(…反向连接…)
公共列表getList()
我可能不想在执行dto.merge时初始化它

Hibernate将自动删除所有关系,即使我没有指定delete\u orphan

我可以知道如何防止hibernate删除关系吗


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

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

因此,如果合并一个分离的实体,而该实体在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之间的关联,那么子实体本身应该自动删除。

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

因此,如果合并一个分离的实体,而该实体在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和子实体之间的关联,则子实体本身应自动删除。

更改来自视图图层是一个模型,我有一个dtoBuilder。。。我如何知道哪些数据发生了变化?是否有一个好的设计模式来管理此类问题?为什么hibernate不提供一个注释来忽略合并?更改来自视图层是一个模型,我有一个dtoBuilder。。。我如何知道哪些数据发生了变化?是否有一个好的设计模式来管理此类问题?为什么hibernate不提供注释来忽略合并?