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

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

问题描述



我无法找到任何有关此无法执行的操作的信息未删除的错误,除了soure代码,所以我认为,也许我正在做一些明显错误的事情......



堆栈跟踪

  AssertionFailure:43  -   -  HHH000099:发生断言失败(这可能表示Hibernate中存在一个错误,但更多可能是由于不安全使用会话):org.hibernate.AssertionFailure:无法执行取消删除例如X 
org.hibernate.AssertionFailure:无法执行取消删除例如X
。在组织.hibernate.engine.spi.ActionQueue.unScheduleDeletion(ActionQueue.java:508)
在org.hibernate.event.internal.DefaultPersistEventListen er.onPersist(DefaultPersistEventListener.java:157)
在org.hibernate.internal.SessionImpl.firePersistOnFlush(SessionImpl.java:870)
在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)
。在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作为org.hibernate.event.internal.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:423)
。 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.internal.Cascade org.hibernate.engine.spi.CascadingAction $ 8.cascade(CascadingAction.java:346)

。 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 b $ b)
在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.ent ityIsPersistent(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)
at org.hibernate.engine.spi.CascadingAction $ 8.cascade(CascadingAction.java:346)
。在在org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323)
org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380)
。在组织。 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。 cascadePro perty(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)
。在组织.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(Criter iaQueryCompiler.java:254)

问候,

解决方案

我有同样的问题。发生了什么事是我删除了相关的bean,让我们称它们为A和B.我已经删除了Bs,然后继续查找连接到As的实体C,并给出了类型A的bean作为查询的参数,并使查询导致了这个异常。我最好的猜测是,实体D上引用A和B的Cascade注释已经删除了As,当我删除了Bs,然后给出了在DB级别上已经删除的实体作为查询的参数导致问题。 p>

重新排列代码,以便首先将C中的引用从A删除,然后继续删除B和A似乎解决了这个问题。 / p>

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天全站免登陆