Come implementare il metodo update () in DAO usando EntityManager (JPA)?
-
05-07-2019 - |
Domanda
Qual è il modo standard per implementare un aggiornamento semplice?
Esempio: abbiamo Utente con numero di telefono NNNNNN e ora vogliamo impostarlo su AAAAAA.
@PersistenceContext
private EntityManager em;
public void update (User transientUser) {
what should be here?
}
L'entità utente è il più semplice possibile:
@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
}
Soluzione
Secondo le specifiche JPA, EntityManager # merge ()
restituirà un riferimento a un altro oggetto rispetto a quello passato quando l'oggetto era già caricato nel contesto corrente . Quindi, preferirei restituire il risultato del merge ()
e scrivere il metodo update ()
in questo modo:
@PersistenceContext
private EntityManager em;
public User update (User transientUser) {
return em.merge(transientUser);
}
Quindi, usalo in questo modo (saltando la parte di inizializzazione):
user.setPhone("YYYYYY");
user = dao.update(user);
Altri suggerimenti
cambia la proprietà e usa EntityManager merge ()
http: / /java.sun.com/javaee/5/docs/api/javax/persistence/EntityManager.html#merge%28T%29