我将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中的错误。满足以下条件时将引发异常:

  • id生成策略是identity
  • 实体保存在事务
  • 之外
  • hibernate.order_insertstrue

  • 发生这种情况是因为EntityIdentityInsertAction可以添加到ActionQueue.insertions列表中,而ActionQueue$InsertActionSorter期望它仅包含EntityInsertAction

    似乎尚未报告此错误,所以feel free to report it

    也许您可以更改hibernate.order_inserts的值作为解决方法。

    10-07 16:55