Wie update () Methode in DAO mit EntityManager (JPA) implementieren?
-
05-07-2019 - |
Frage
Was ist der normale Weg, einfaches Update zu implementieren?
Beispiel: Wir haben Benutzer mit Telefonnummer NNNNNN und jetzt wollen wir es YYYYYY einstellen
.@PersistenceContext
private EntityManager em;
public void update (User transientUser) {
what should be here?
}
Benutzereinheit ist so einfach wie möglich:
@Entity
@Table (name = "USER")
public class User {
@Id
@GeneratedValue
private Integer id;
@Column (nullable = false, unique = true)
private String login;
private String phone;
public User () { }
... //some setters and getters
}
Lösung
Nach den JPA-Spezifikationen, EntityManager#merge()
wird wieder einen Verweis auf andere Objekt als die bestandenen einen in, wenn das Objekt bereits im aktuellen Kontext geladen. Also, ich würde eher geben das Ergebnis des merge()
und schreiben die update()
Methode wie folgt:
@PersistenceContext
private EntityManager em;
public User update (User transientUser) {
return em.merge(transientUser);
}
Dann verwenden Sie es wie folgt (Überspringen der Initialisierung Teil):
user.setPhone("YYYYYY");
user = dao.update(user);
Andere Tipps
die Eigenschaft ändern und dann mit EntityManager fusionieren ()
http: / /java.sun.com/javaee/5/docs/api/javax/persistence/EntityManager.html#merge%28T%29