Hibernate java.lang.ClassCastException:org.Hibernate.action.EntityIdentityInsertAction不能强制转换为org.Hibernate.action.EntityInsertAction
我正在使用Hibernate和EntityManager。当我使用Hibernate java.lang.ClassCastException:org.Hibernate.action.EntityIdentityInsertAction不能强制转换为org.Hibernate.action.EntityInsertAction,hibernate,flush,classcastexception,entitymanager,Hibernate,Flush,Classcastexception,Entitymanager,我正在使用Hibernate和EntityManager。当我使用 Session session = (Session)entityManager.getDelegate(); session.flush(); session.clear(); 我明白了 java.lang.ClassCastException: org.hibernate.action.EntityIdentityInsertAction cannot be cast to org.hibern
Session session = (Session)entityManager.getDelegate();
session.flush();
session.clear();
我明白了
java.lang.ClassCastException: org.hibernate.action.EntityIdentityInsertAction cannot be cast to org.hibernate.action.EntityInsertAction
at org.hibernate.engine.ActionQueue$InsertActionSorter.sort(ActionQueue.java:636)
at org.hibernate.engine.ActionQueue.sortInsertActions(ActionQueue.java:369)
at org.hibernate.engine.ActionQueue.sortActions(ActionQueue.java:355)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:224)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
因为它没有说是哪个实体导致了问题,所以我被困在这里。有人知道是什么导致了这种情况吗?这是Hibernate中的一个bug。满足以下条件时引发异常:
- id生成策略是
identity
- 实体保存在事务外部
为hibernate.order\u inserts
true
EntityIdentityInsertAction
可以添加到ActionQueue.insertions
列表中,而ActionQueue$InsertActionSorter
希望它只包含EntityInsertAction
s
看起来这个bug还没有被报告,所以
也许您可以更改
hibernate.order\u inserts
的值作为解决方法。我之所以出现此错误,是因为我忘记在调用em.persist(myNewEntity)
的方法上添加@Transactional
注释,因为我以为所有调用方都将进行事务处理
错误不是直接弹出的,而是当我试图从表中删除所有行时
事实上,这个错误是有误导性的,但它与第二种情况相同
所以
确保在活动事务中完成保存操作