Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Hibernate java.lang.ClassCastException: org.hibernate.action.EntityIdentityInsertAction cannot be cast to org.hibernate.action.EntityInsertAction

I'm using Hibernate with an EntityManager. When I use

    Session session = (Session)entityManager.getDelegate();  
    session.flush();
    session.clear();

I get

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)

Since it doesn't say which entity causes the problem, I'm stuck here. Does anyone have an idea what can cause this?

like image 699
Stijn.V Avatar asked Sep 14 '11 06:09

Stijn.V


1 Answers

It's a bug in Hibernate. Exception is thrown when following conditions are met:

  • id generation strategy is identity
  • entity is saved outside of transaction
  • hibernate.order_inserts is true

It happens because EntityIdentityInsertAction can be added to the ActionQueue.insertions list, whereas ActionQueue$InsertActionSorter expects that it contains only EntityInsertActions.

It looks like this bug was not reported yet, so feel free to report it.

Perhaps you can change the value of hibernate.order_inserts as a workaround.

like image 80
axtavt Avatar answered Oct 22 '22 22:10

axtavt