2011-09-14 9 views
5

Sto utilizzando Hibernate con un EntityManager. Quando usoHibernate java.lang.ClassCastException: impossibile eseguire il casting su org.hibernate.action.EntityIdentityInsertAction su org.hibernate.action.EntityInsertAction

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

ottengo

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) 

Dal momento che non dice quale entità causa il problema, mi sono bloccato qui. Qualcuno ha un'idea di cosa può causare questo?

risposta

2

È un errore in Hibernate. Eccezione viene generata quando sono soddisfatte le condizioni seguenti:

  • strategia di generazione id è identity
  • entità viene salvato all'esterno della transazione
  • hibernate.order_inserts è true

Succede perché EntityIdentityInsertAction possono essere aggiunti alla Lista ActionQueue.insertions, mentre ActionQueue$InsertActionSorter si aspetta che contenga solo EntityInsertAction s.

Sembra che questo errore non sia stato ancora segnalato, quindi feel free to report it.

Forse è possibile modificare il valore di hibernate.order_inserts come soluzione alternativa.