我得到了上述错误“org.hibernate.ObjectDeletedException:删除的对象将被级联重新保存(删除从关联删除对象):“。有人可以帮我解决什么问题,应该怎么解决?org.hibernate.ObjectDeletedException:删除的对象将被级联重新保存(从关联中删除删除的对象):
谢谢。
我得到了上述错误“org.hibernate.ObjectDeletedException:删除的对象将被级联重新保存(删除从关联删除对象):“。有人可以帮我解决什么问题,应该怎么解决?org.hibernate.ObjectDeletedException:删除的对象将被级联重新保存(从关联中删除删除的对象):
谢谢。
没有映射结束代码有点困难... 这是由于您正在删除与某个集合关联的对象而导致的。
你必须从拥有集合(S)删除对象,之后,删除对象
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),但它是由另一个实体引用,并anotated与级联注解。该参考将导致实体(A)立即重新处理。由于这可能不是你想要的,所以hibernate抱怨。
解决的办法是找到实体可以通过的所有引用(包括集合),并将它们设置为null
/从集合中删除实体。
你可以把你的删除逻辑放在一边:让参考(如果只有一个)删除孤儿,然后在@bellabax中删除它。
这个异常告诉你正在删除的对象也被映射为任何实体的集合,并且你的集合中的级联id全部都是。所以,如果你想删除的任何方式,您可以将您的级联改变
cascade = CascadeType.DETACH
如果您通过XML这样做(而不是注解),以下是为我工作的解决方案:
一到 - 许多社团:
小心:会话。因为Hibernate需要查看更改,所以flush()非常重要,如果不能刷新会话,我会建议您在不同的事务中执行步骤(1,2),然后执行步骤(4,5, 6)在新的交易中。
hibernate用户应该使用这个方法去除孤儿@Cascade({org.hibernate.annotations.CascadeType.DELETE_ORPHAN}) – Akhilesh