org.hibernate.ObjectDeletedException:已删除的对象将通过级联重新保存(从关联中删除已删除的对象):

use*_*036 11 hibernate

我收到上述错误"org.hibernate.ObjectDeletedException:删除对象将通过级联(移除协会删除的对象)重新保存".有人可以帮助我可能是什么问题,应该解决什么?

谢谢.

Luc*_*cci 18

没有映射结束代码有点困难......这通常是因为您要删除与集合相关联的对象.
您必须从拥有集合中删除对象,然后删除对象

parentObject.collection.remove(objToDelete);
session.delete(objToDelete);
session.save(parentObject);
Run Code Online (Sandbox Code Playgroud)

但是你可以用这种方式使用deleteOrphan来映射集合来避免这种情况

class ParentObject {
  @OneToMany(orphanRemoval=true)
  private List<ChildObject> collection;
}
Run Code Online (Sandbox Code Playgroud)

和代码看起来像

parentObject.collection.remove(objToDelete);
session.save(parentObject);
Run Code Online (Sandbox Code Playgroud)

您不需要删除对象,因为在保存parentObject时Hibernate会自动删除它.

希望可以帮助


Jen*_*der 5

您已在会话中删除了实体(A),但它被另一个实体引用并使用Cascade注释进行了分配.该引用将导致实体(A)立即重新处理.由于这可能不是你想要的,hibernate抱怨.

解决方案是查找实体可通过的所有引用(包括集合),并将它们设置为null/从集合中删除实体.

你可以改变你的删除逻辑:制作一个删除孤儿的引用(如果只有一个),然后将其删除,如@bellabax所述.