Hibernate java.lang.ClassCastException : org. hibernate.action.EntityIdentityInsertAction 无法转换为 org.hibernate.action.EntityInsertAction

标签 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.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 s。

    看起来这个bug还没有被报告,所以feel free to report it .

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

    关于Hibernate java.lang.ClassCastException : org. hibernate.action.EntityIdentityInsertAction 无法转换为 org.hibernate.action.EntityInsertAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7412252/

    相关文章:

    java - 多维数组映射<Integer, Map<Integer,Entity>> 或map<Entity1,Entity2>

    Go Flush() 不起作用

    redis - Jedis java.lang.Long 不能转换为 [B

    java - 如何在 Hibernate 中使用 pooled-lo 优化器

    java - 我收到错误 "Invalid column name"

    java - 无法通过反射 setter 设置字段值

    java - 在这种情况下是否需要调用 flush() (JPA 接口(interface))?

    python - 如何刷新打印功能的输出?

    java - Hibernate 类强制转换异常

    android - fragment 类中的 TimePickerDialog