Referenz speichern und persistieren

Goosefraba

Mitglied
Hallo!

Ich arbeite derzeit an einem JSF-Kalender und versuche dort die Funktion des "User anlegen" zu modifizieren.
Beim persistieren und flushen des neuen UserObjektes versuche ich noch eine Referenz mitzuspeichern, allerdings kommst ständig die Exception:

Code:
Exception Description: Cannot persist detached object [at.irian.medicalscheduler.orm.CompanyCalendar@1fddb33]. 
Class> at.irian.medicalscheduler.orm.CompanyCalendar Primary Key> [1]
	at com.sun.facelets.el.LegacyMethodBinding.invoke(LegacyMethodBinding.java:73)
	at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:61)
	... 25 more
Caused by: javax.persistence.EntityExistsException: 
Exception Description: Cannot persist detached object [at.irian.medicalscheduler.orm.CompanyCalendar@1fddb33]. 
Class> at.irian.medicalscheduler.orm.CompanyCalendar Primary Key> [1]
	at oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerImpl.persist(EntityManagerImpl.java:193)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
...

Nach ein paar Stunden rumgequäle und rumprobieren, richte ich mich nun in der Hoffnung auf Hilfe an Euch ;)

Hier der Code:

Code:
            if(!getEm().contains(user) && user.getUid() == null)
                getEm().persist(user);
            //we flush here because the user already exists
            //since we apply conversations here no merge is needed anymore
            
            CompanyCalendar cal = this.companycalendar;
            cal.getUsers().add(user);
            user.setCompanycalendar(cal);
            
            getEm().flush();

Das Object companycalender existiert bereits in der DB und über sysout erhalte ich auch die korrekten Werte, also das Objekt existiert.
 
Bin selbst noch am lernen des Umgangs mit der JPA API, aber ich vermute mal, das das Problem aus dem
Java:
CompanyCalendar cal = this.companycalendar;
Das Objekt das Du da erhälst ist im Detached Mode, Du könntest versuchen mit
Java:
getEm().merge(cal);
das Kalender Objekt wieder in den Persistence Scope einzufügen.

Gruß
 
Hallo!

Danke schonmal für die rasche Antwort, leider kommt ebenfalls eine Fehlermeldung.

Code:
Caused by: javax.faces.el.EvaluationException: /user/detail.xhtml @177,29 action="#{userdetailview.dosubmit}": javax.persistence.EntityExistsException: 
Exception Description: Cannot persist detached object [at.irian.medicalscheduler.orm.CompanyCalendar@fcc13d]. 
Class> at.irian.medicalscheduler.orm.CompanyCalendar Primary Key> [1]
 
Habe die Lösung gefunden!
Das Problem war, dass die Objekte über 2 unterschiedliche EntityManager geladen wurden.

Lösung: Die ID des einen Objektes im Speicher halten und bei Bedarf (Referenz-Zuweisung) direkt neu laden.

Liebe Grüße,
Goose
 

Neue Beiträge

Zurück