web-dev-qa-db-fra.com

Comment implémenter la méthode update () dans DAO en utilisant EntityManager (JPA)?

Quelle est la méthode standard pour implémenter une mise à jour simple?

Exemple: nous avons un utilisateur avec le numéro de téléphone NNNNNN et nous voulons maintenant le définir sur AAAAAA.

@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
}
21
Roman

Selon les spécifications JPA, EntityManager#merge() renverra une référence à n autre objet que celle passée lorsque l'objet était déjà 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, utilisez-le comme ceci (en sautant la partie d'initialisation):

user.setPhone("YYYYYY");
user = dao.update(user);
52
Pascal Thivent

changer la propriété et ensuite utiliser EntityManager merge ()

http://Java.Sun.com/javaee/5/docs/api/javax/persistence/EntityManager.html#merge%28T%29

2
Stefan Ernst