org.hibernate.AssertionFailure:例如无法执行取消删除 [英] org.hibernate.AssertionFailure: Unable to perform un-delete for instance
问题描述
当我尝试在一些删除操作后进行读取时,我收到此休眠断言错误.
我找不到有关此无法执行取消删除"错误的任何信息,除了源代码,所以我认为,也许我在做一些明显错误的事情......
堆栈跟踪如下,
AssertionFailure:43 - - HHH000099:发生断言失败(这可能表明 Hibernate 中存在错误,但更有可能是由于会话的不安全使用):org.hibernate.AssertionFailure:无法执行删除例如 Xorg.hibernate.AssertionFailure:无法对实例 X 执行取消删除在 org.hibernate.engine.spi.ActionQueue.unScheduleDeletion(ActionQueue.java:508)在 org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:157)在 org.hibernate.internal.SessionImpl.firePersistOnFlush(SessionImpl.java:870)在 org.hibernate.internal.SessionImpl.persistOnFlush(SessionImpl.java:863)在 org.hibernate.engine.spi.CascadingAction$8.cascade(CascadingAction.java:346)在 org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380)在 org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323)在 org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208)在 org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165)在 org.hibernate.event.internal.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:423)在 org.hibernate.event.internal.DefaultPersistEventListener.justCascade(DefaultPersistEventListener.java:190)在 org.hibernate.event.internal.DefaultPersistEventListener.entityIsDeleted(DefaultPersistEventListener.java:229)在 org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:158)在 org.hibernate.internal.SessionImpl.firePersistOnFlush(SessionImpl.java:870)在 org.hibernate.internal.SessionImpl.persistOnFlush(SessionImpl.java:863)在 org.hibernate.engine.spi.CascadingAction$8.cascade(CascadingAction.java:346)在 org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380)在 org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323)在 org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208)在 org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165)在 org.hibernate.event.internal.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:423)在 org.hibernate.event.internal.DefaultPersistEventListener.justCascade(DefaultPersistEventListener.java:190)在 org.hibernate.event.internal.DefaultPersistEventListener.entityIsPersistent(DefaultPersistEventListener.java:183)在 org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:147)在 org.hibernate.internal.SessionImpl.firePersistOnFlush(SessionImpl.java:870)在 org.hibernate.internal.SessionImpl.persistOnFlush(SessionImpl.java:863)在 org.hibernate.engine.spi.CascadingAction$8.cascade(CascadingAction.java:346)在 org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380)在 org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323)在 org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208)在 org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:409)在 org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:350)在 org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:326)在 org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208)在 org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165)在 org.hibernate.event.internal.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:160)在 org.hibernate.event.internal.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:151)在 org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:88)在 org.hibernate.event.internal.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:58)在 org.hibernate.internal.SessionImpl.autoFlushIfRequired(SessionImpl.java:1186)在 org.hibernate.internal.SessionImpl.list(SessionImpl.java:1241)在 org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)在 org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:257)在 org.hibernate.ejb.criteria.CriteriaQueryCompiler$3.getResultList(CriteriaQueryCompiler.java:254)
问候,
我遇到了同样的问题.发生的事情是我正在删除相关的 bean,我们称它们为 A 和 B.我已经删除了 B,然后继续查找链接到 As 的实体 C,并将 A 类型的 bean 作为参数提供给查询并使查询导致此异常.我最好的猜测是实体 D 上的 Cascade 注释,同时引用 A 和 B,在我删除 Bs 时删除了 As,然后将已在数据库级别删除的实体作为参数来查询导致问题.>
重新排列代码,以便我首先删除从 C 到 A 的引用,然后继续删除 B 和 A 似乎可以解决这个问题.
I am getting this hibernate assertion error, when i try to make a read after some delete operations.
I couldn't find anything regarding this ' Unable to perform un-delete' error, except the soure code, so i think that, maybe i am doing something so obviously wrong...
The stack trace is below,
AssertionFailure:43 - - HHH000099: an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session): org.hibernate.AssertionFailure: Unable to perform un-delete for instance X
org.hibernate.AssertionFailure: Unable to perform un-delete for instance X
at org.hibernate.engine.spi.ActionQueue.unScheduleDeletion(ActionQueue.java:508)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:157)
at org.hibernate.internal.SessionImpl.firePersistOnFlush(SessionImpl.java:870)
at org.hibernate.internal.SessionImpl.persistOnFlush(SessionImpl.java:863)
at org.hibernate.engine.spi.CascadingAction$8.cascade(CascadingAction.java:346)
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208)
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165)
at org.hibernate.event.internal.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:423)
at org.hibernate.event.internal.DefaultPersistEventListener.justCascade(DefaultPersistEventListener.java:190)
at org.hibernate.event.internal.DefaultPersistEventListener.entityIsDeleted(DefaultPersistEventListener.java:229)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:158)
at org.hibernate.internal.SessionImpl.firePersistOnFlush(SessionImpl.java:870)
at org.hibernate.internal.SessionImpl.persistOnFlush(SessionImpl.java:863)
at org.hibernate.engine.spi.CascadingAction$8.cascade(CascadingAction.java:346)
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208)
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165)
at org.hibernate.event.internal.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:423)
at org.hibernate.event.internal.DefaultPersistEventListener.justCascade(DefaultPersistEventListener.java:190)
at org.hibernate.event.internal.DefaultPersistEventListener.entityIsPersistent(DefaultPersistEventListener.java:183)
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:147)
at org.hibernate.internal.SessionImpl.firePersistOnFlush(SessionImpl.java:870)
at org.hibernate.internal.SessionImpl.persistOnFlush(SessionImpl.java:863)
at org.hibernate.engine.spi.CascadingAction$8.cascade(CascadingAction.java:346)
at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208)
at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:409)
at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:350)
at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:326)
at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208)
at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165)
at org.hibernate.event.internal.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:160)
at org.hibernate.event.internal.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:151)
at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:88)
at org.hibernate.event.internal.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:58)
at org.hibernate.internal.SessionImpl.autoFlushIfRequired(SessionImpl.java:1186)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1241)
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:257)
at org.hibernate.ejb.criteria.CriteriaQueryCompiler$3.getResultList(CriteriaQueryCompiler.java:254)
Regards,
I had this same problem. What happened is that I was deleting related beans, let's call them A and B. I had deleted Bs and then proceeded to find entities C that link to As, and gave bean of type A as parameter to query and making the query caused this Exception. My best guess is that a Cascade annotation on the entity D, referencing both A and B, had deleted the As when I deleted the Bs and then giving an entity that was already deleted on DB level as parameter to query cause the problem.
Rearranging the code so that I first remove the references from C to A and then proceed to delete both B and A seems to work around this.
这篇关于org.hibernate.AssertionFailure:例如无法执行取消删除的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!