2011-09-14 19 views
5

Estoy usando Hibernate con un EntityManager. Cuando usoHibernate java.lang.ClassCastException: org.hibernate.action.EntityIdentityInsertAction no se puede convertir a org.hibernate.action.EntityInsertAction

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

consigo

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) 

Dado que no dice cuál es la entidad que causa el problema, estoy atascado aquí. ¿Alguien tiene una idea de lo que puede causar esto?

Respuesta

2

Es un error en Hibernate. Excepción se produce cuando se cumplen las condiciones siguientes:

  • estrategia de generación de id es identity
  • entidad se guarda fuera de la transacción
  • hibernate.order_inserts es true

Sucede porque EntityIdentityInsertAction se puede agregar a la ActionQueue.insertions lista, mientras que ActionQueue$InsertActionSorter espera que contenga solo EntityInsertAction s.

Parece que este error no se informó aún, por lo feel free to report it.

Quizás pueda cambiar el valor de hibernate.order_inserts como una solución.

Cuestiones relacionadas