Comment implémenter la méthode update () dans DAO en utilisant EntityManager (JPA)?
-
05-07-2019 - |
Question
Quel est le moyen standard d'implémenter une mise à jour simple?
Exemple: nous avons un utilisateur dont le numéro de téléphone est NNNNNN et nous souhaitons maintenant le définir sur AAAA.
@PersistenceContext
private EntityManager em;
public void update (User transientUser) {
what should be here?
}
L'entité utilisateur est aussi simple que possible:
@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
}
La solution
Selon les spécifications JPA, EntityManager # merge ()
renverra une référence à un autre objet à celui transmis lorsque l'objet était déjà chargé dans le contexte actuel. . Je préférerais donc renvoyer le résultat de merge ()
et écrire la méthode update ()
comme ceci:
@PersistenceContext
private EntityManager em;
public User update (User transientUser) {
return em.merge(transientUser);
}
Ensuite, utilisez-le comme ceci (en ignorant la partie d'initialisation):
user.setPhone("YYYYYY");
user = dao.update(user);
Autres conseils
changez la propriété puis utilisez EntityManager merge ()
http: / /java.sun.com/javaee/5/docs/api/javax/persistence/EntityManager.html#merge%28T%29