Как реализовать метод update () в DAO с помощью EntityManager (JPA)?

каков стандартный способ реализации простого обновления?

пример: у нас есть пользователь с номером телефона NNNNNNNN, и теперь мы хотим установить его в YYYYYYY.

@PersistenceContext
private EntityManager em;

public void update (User transientUser) {
    what should be here?
}

сущность пользователя максимально проста:

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

2 ответов


согласно спецификациям JPA,EntityManager#merge() возвращает ссылку на другое объект, чем тот, который был передан, когда объект уже был загружен в текущем контексте. Итак, я бы предпочел вернуть результат merge() и писать update() способ такой:

@PersistenceContext
private EntityManager em;

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

затем используйте его следующим образом (пропуская часть инициализации):

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

измените свойство, а затем используйте EntityManager merge ()

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