【问题标题】:Hibernate java.lang.ClassCastException: org.hibernate.action.EntityIdentityInsertAction cannot be cast to org.hibernate.action.EntityInsertActionHibernate java.lang.ClassCastException: org.hibernate.action.EntityIdentityInsertAction 不能转换为 org.hibernate.action.EntityInsertAction
【发布时间】:2011-11-16 18:08:13
【问题描述】:

我正在使用带有 EntityManager 的 Hibernate。当我使用

    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 flush classcastexception entitymanager


    【解决方案1】:

    这是 Hibernate 中的一个错误。满足以下条件时抛出异常:

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

    这是因为EntityIdentityInsertAction 可以添加到ActionQueue.insertions 列表中,而ActionQueue$InsertActionSorter 预计它只包含EntityInsertActions。

    这个bug好像还没有报告,所以feel free to report it

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

    【讨论】:

      【解决方案2】:

      我收到此错误只是因为我忘记在调用 em.persist(myNewEntity) 的方法上添加 @Transactional 注释,因为我认为所有调用者都会在 Transaction 上,

      错误不是直接弹出,而是当我尝试从表中删除所有行时

      确实该错误具有误导性,但它与@axtavt answer 中的第二种情况相同

      所以

      确保保存操作在活动事务中完成

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-14
        • 2019-05-08
        • 2011-12-01
        相关资源
        最近更新 更多