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