2010-01-13 3 views
5

ottengo il seguente errore quando si tenta di persistere un oggetto:JPA EclipseLink: come trovare quale rapporto sta causando errore

java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST

C'è un modo semplice per dire quale rapporto ha lo scopo problema?

È possibile che l'oggetto persistente contenga molte relazioni e un tentativo, un errore o una ricerca per eliminazione, ma vorrei sapere se esiste un modo più semplice e più rapido per identificare l'oggetto della relazione con il problema.

Update: ho incontrato questo problema periodicamente, e sono sempre stato in grado di trovare la fonte del problema, o sono stato capace di riordinare le operazioni al fine di risolvere il problema, ma il mio problema è la quantità di tempo che serve per trovare l'oggetto incriminato.

Le mie soluzioni sono sempre state trovate per tentativi ed errori. A volte trovo la soluzione in pochi minuti, ma a volte ci vogliono ore. La mia domanda è: c'è un modo più semplice per scoprire quale delle possibili relazioni causi il problema. L'eccezione afferma solo che un "nuovo oggetto" è stato trovato attraverso una "relazione", questo non mi aiuta a trovare quale oggetto o quale relazione. Esiste un registro o un modo per dire al sistema di fornire un errore più specifico?

+2

Forse vuoi vedere http://dev.eclipse.org/mhonarc/lists/eclipselink-users/msg00553.html Se possibile, mostra il tuo codice. Non posso indovinare cosa sta succedendo se non fornisci maggiori informazioni. –

+0

Arthur: Grazie e apprezzo la tua risposta, ma la mia domanda è più generale di quella. Ho aggiornato la mia domanda per darti un'idea migliore di ciò che sto cercando. – rayd09

+0

Hai provato a configurare eclipselink.logging.level in persistence.xml - http://wiki.eclipse.org/EclipseLink/Examples/JPA/Logging ?? – rochb

risposta

-1
<property name="eclipselink.logging.level" value="FINEST"/> 

causerà EclipseLink per mostrare registri più dettagliati che possono aiutare a rilevare il motivo dell'errore più da vicino.

+0

Grazie per il suggerimento. Provato, non fornisce ancora il dettaglio di cui ho bisogno. – rayd09

0

Il prossimo è un ascoltatore per tutta la richiesta del vostro APP, per attivarlo:

  1. Nel vostro persistence.xml aggiuntivo:

    <property name="eclipselink.session.customizer" value="dz.bilelovitch.QueryListener"/> 
    
  2. Creare il QueryListener :

    import org.eclipse.persistence.config.SessionCustomizer; 
    import org.eclipse.persistence.sessions.Session; 
    
    public class QueryListener implements SessionCustomizer { 
    
        @Override 
        public void customize(Session aSession) throws Exception { 
         System.out.println("log " + aSession.getLog()); 
        }