2016-06-12 7 views
0

Ich habe ein Entity User und ein Entity UserPage der Benutzer keine Benutzerseite hat, wenn man ihn
Nun erstellen möchte ich eine Benutzerseite erstellen und sie dem Benutzer zugeordnet werden. Das sieht wie folgt aus:Wie Änderungen an einer Entität speichern JPA mit

UserPage page= new UserPage([Attributes here]); 
User user; (this is a User previously created, persisted and now fetched) 

jetzt habe ich folgendes tun:

user.setUserPage(page); 
userPageEJB.persist(page); 

jetzt, wenn ich die Benutzerseite des Benutzers holen will, das tue ich:

User user= userEJB.getUserByID([userID here]); 
UserPage page= user.getUserPage(); 

Das Problem ist jetzt ist, dass die Änderungen scheinbar nicht gespeichert wurden (die letzte Zeile des Codes gibt immer null zurück). Wie speichere ich sie, damit ich die Seite eines bestimmten Benutzers abrufen kann?

+0

Zeigen Sie den Umgebungscode an. Läuft das alles in der gleichen Transaktion? Wie wird das gehandhabt? – chrylis

Antwort

0

Wenn Benutzer und UserPage eine Eltern-Kind-Beziehung haben, verwenden Sie CascadeType Mapping. diese Zuordnung JPA wird zu entsprechenden DML-Anweisung Änderung Entitätsstatus übersetzen:

class User{ 
@OneToOne(mappedBy = "user", 
    cascade = CascadeType.PERSIST) 
private UserPage userPage; 
.... 
} 
0

das erste, was die CascadeType der Beziehung zwischen Benutzerseite, und Benutzer zu überprüfen, müssen Sie mindestens eine CascadeType.PERSIST haben, können Sie auch Verwenden Sie CascadeType.ALL abhängig von der Definition der Beziehung, die Sie gemacht haben. Die zweite Sache ist, zu überprüfen, ob Ihr Code in einer einzigen Transaktion ausgeführt wurde (ob BTM oder CTM), um sicherzustellen, dass alle Änderungen in der Datenbank geleert wurden.