我收到上述错误“org.hibernate.ObjectDeletedException:已删除的对象将被级联重新保存(从关联中删除已删除的对象):”。有人可以帮助我可能是什么问题,应该解决什么问题?
谢谢。
我收到上述错误“org.hibernate.ObjectDeletedException:已删除的对象将被级联重新保存(从关联中删除已删除的对象):”。有人可以帮助我可能是什么问题,应该解决什么问题?
谢谢。
没有映射结束代码有点难......这通常是因为您正在删除与集合关联的对象。
您必须从拥有的集合中删除对象,然后删除对象
parentObject.collection.remove(objToDelete);
session.delete(objToDelete);
session.save(parentObject);
但是您可以通过这种方式使用 deleteOrphan 映射集合来避免这种情况
class ParentObject {
@OneToMany(orphanRemoval=true)
private List<ChildObject> collection;
}
和代码看起来像
parentObject.collection.remove(objToDelete);
session.save(parentObject);
您不再需要删除对象,因为它会在保存 parentObject 时被 Hibernate 自动删除。
希望能有所帮助
您在会话中删除了一个实体 (A),但它被另一个实体引用并使用 Cascade 注释进行注释。该引用将导致实体 (A) 立即重新创建。由于这可能不是您想要的,hibernate 抱怨。
解决方案是查找可以访问实体的所有引用(包括集合),并将它们设置为null
/从集合中删除实体。
您可以改变您的删除逻辑:将引用(如果只有一个)设为删除孤儿,然后按照@bellabax 的描述将其删除。
此异常告诉您要删除的对象也映射到任何实体的集合,并且您在该集合中的级联 id 全部。因此,如果您想删除任何方式,您可以将级联更改为
cascade = CascadeType.DETACH
如果您通过 XML(而不是注释)执行此操作,以下是对我有用的解决方案:
一对多关联:
注意: session.flush() 很重要,因为 Hibernate 需要查看更改,
如果您无法刷新会话,我建议您在不同的事务中执行步骤 (1,2),然后在新事务中执行步骤 (4,5,6)。