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

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

  •  05-07-2019
  •  | 
  •  

Вопрос

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

Пример: у нас есть Пользователь с номером телефона NNNNNN, и теперь мы хотим установить для него ГГГГГГ.

@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
}
Это было полезно?

Решение

В соответствии со спецификациями 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top