org.hibernate.AssertionFailure:例如无法执行取消删除 [英] org.hibernate.AssertionFailure: Unable to perform un-delete for instance

查看:45
本文介绍了org.hibernate.AssertionFailure:例如无法执行取消删除的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试在一些删除操作后进行读取时,我收到此休眠断言错误.

我找不到有关此无法执行取消删除"错误的任何信息,除了源代码,所以我认为,也许我在做一些明显错误的事情......

堆栈跟踪如下,

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆