2010-01-13 6 views
5

ich die folgende Fehlermeldung erhalten, wenn man versucht, ein Objekt zu bestehen:JPA Eclipselink: Wie welche Beziehung finden verursachen Fehler

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

Gibt es eine einfache Möglichkeit, die Beziehung zu sagen, das Problem Objekt hat?

Es ist möglich, dass das persistente Objekt viele Beziehungen hat und ein Versuch und ein Fehler oder eine Suche durch Eliminierung funktioniert, aber ich würde gerne wissen, ob es einen einfacheren schnelleren Weg gibt, das Problembeziehungsobjekt zu identifizieren.

Update: Ich stoße dieses Problem in regelmäßigen Abständen, und ich war immer in der Lage, die Ursache des Problems zu finden, oder in der Lage, die Operationen neu zu ordnen, um das Problem zu lösen, aber mein Problem ist die Zeit Es dauert, um das beleidigende Objekt zu finden.

Meine Lösungen wurden immer durch Versuch und Irrtum gefunden. Manchmal finde ich die Lösung in Minuten, manchmal dauert es Stunden. Meine Frage ist: Gibt es einen leichteren Weg zu finden, welche von möglicherweise vielen Beziehungen das Problem verursacht. Die Ausnahme behauptet nur, dass ein "neues Objekt" durch eine "Beziehung" gefunden wurde, das hilft mir nicht, welches Objekt oder welche Beziehung zu finden. Gibt es ein Protokoll oder eine Möglichkeit, dem System mitzuteilen, dass es einen spezifischeren Fehler geben soll?

+2

Vielleicht möchten Sie http://dev.eclipse.org/mhonarc/lists/ecclipselink-users/msg00553.html sehen Wenn möglich, zeigen Sie Ihren Code. Ich kann nicht erraten, was passiert, wenn Sie nicht mehr Informationen zur Verfügung stellen. –

+0

Arthur: Danke und ich schätze deine Antwort, aber meine Frage ist allgemeiner. Ich habe meine Frage aktualisiert, um Ihnen eine bessere Vorstellung davon zu geben, wonach ich suche. – rayd09

+0

Haben Sie versucht, den eclipselink.logging.level in persistence.xml zu konfigurieren - http://wiki.eclipse.org/EclipseLink/Examples/JPA/Logging ?? – rochb

Antwort

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

wird Eclipse verursachen mehr detaillierte Protokolle zu zeigen, die Sie den Grund des Fehlers erkennen helfen kann eng mehr.

+0

Vielen Dank für den Vorschlag. Versucht es, es gibt immer noch nicht die Details, die ich brauche. – rayd09

0

Der nächste Schritt ist ein Zuhörer für die ganze Anforderung Ihrer APP, um es zu aktivieren:

  1. In Ihrem persistence.xml add:

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

    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()); 
        } 
    
Verwandte Themen