2009-11-27 13 views
16

¿Cuál es la forma estándar de implementar una actualización simple?¿Cómo implementar el método update() en DAO usando EntityManager (JPA)?

Ejemplo: tenemos 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? 
} 

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

em.merge (transientUser)? – marcosbeirigo

+0

tal vez, no estoy seguro – Roman

+0

en realidad, esto es lo que tengo ahora. Pero aún no lo probé debido a que no es tan fácil configurar el contexto de las pruebas unitarias. – Roman

Respuesta

33

De acuerdo con las especificaciones de la APP, EntityManager#merge() volverá una referencia a otro objeto que el que se pasó cuando el objeto estaba alrea dy cargado en el contexto actual. Por lo tanto, prefiero devolver el resultado de la merge() y escribir el método update() así:

@PersistenceContext 
private EntityManager em; 

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

A continuación, utilizar de esta manera (omitiendo la parte de inicialización):

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