2009-11-27 12 views
16

Quelle est la manière standard d'implémenter une mise à jour simple? Exemple: nous avons un utilisateur avec le numéro de téléphone NNNNNN et maintenant nous voulons le régler sur YYYYYY.Comment implémenter la méthode update() dans DAO en utilisant EntityManager (JPA)?

@PersistenceContext 
private EntityManager em; 

public void update (User transientUser) { 
    what should be here? 
} 

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 
} 
+0

em.merge (transientUser)? – marcosbeirigo

+0

peut-être, je ne suis pas sûr – Roman

+0

en fait, c'est ce que j'ai maintenant. Mais je ne l'ai pas encore testé car il n'est pas si simple de configurer le contexte des tests unitaires. – Roman

Répondre

33

Selon les spécifications JPA, EntityManager#merge() renverra une référence à un autre objet que celui passé quand l'objet était alrea dy chargé dans le contexte actuel. Donc, je préfère retourner le résultat de la merge() et écrire la méthode update() comme ceci:

@PersistenceContext 
private EntityManager em; 

public User update (User transientUser) { 
    return em.merge(transientUser); 
} 

Ensuite, l'utiliser comme ceci (sauter la partie d'initialisation):

user.setPhone("YYYYYY"); 
user = dao.update(user);