我正在使用Hibernate和EntityManager。我用的时候
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中的一个错误。满足以下条件时抛出异常:
identity
hibernate.order_inserts
是true
这是因为EntityIdentityInsertAction
可以添加到ActionQueue.insertions
列表中,而ActionQueue$InsertActionSorter
期望它只包含EntityInsertAction
s。
看起来这个bug还没有被报道,所以feel free to report it。
也许您可以将hibernate.order_inserts
的值更改为变通方法。
我得到这个错误只是因为我忘记在调用@Transactional
的方法上添加em.persist(myNewEntity)
注释,因为我认为所有调用者都将在Transaction上,
错误不会直接弹出,但当我尝试从表中删除所有行时
实际上这个错误是误导性的,但它与@axtavt answer中的第二个案例相同
所以
确保在活动事务中完成保存操作