¿Cómo implementar el método update () en DAO usando EntityManager (JPA)?
-
05-07-2019 - |
Pregunta
¿Cuál es la forma estándar de implementar una actualización simple?
Ejemplo: tenemos un usuario con número de teléfono NNNNNN y ahora queremos configurarlo en YYYYYY.
@PersistenceContext
private EntityManager em;
public void update (User transientUser) {
what should be here?
}
La entidad de usuario es lo más simple posible:
@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
}
Solución
De acuerdo con las especificaciones JPA, EntityManager # merge ()
devolverá una referencia a otro objeto que el que se pasó cuando el objeto ya estaba cargado en el contexto actual . Por lo tanto, prefiero devolver el resultado del merge ()
y escribir el método update ()
de esta manera:
@PersistenceContext
private EntityManager em;
public User update (User transientUser) {
return em.merge(transientUser);
}
Luego, úselo así (omitiendo la parte de inicialización):
user.setPhone("YYYYYY");
user = dao.update(user);
Otros consejos
cambie la propiedad y luego use EntityManager merge ()
http: / /java.sun.com/javaee/5/docs/api/javax/persistence/EntityManager.html#merge%28T%29