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

StackOverflow https://stackoverflow.com/questions/1809159

  •  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
}
Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top