java - 如何使用 EntityManager (JPA) 在 DAO 中实现 update() 方法?

标签 java jpa entitymanager

实现简单更新的标准方法是什么?

示例:我们有电话号码为 NNNNNN 的用户,现在我们要将其设置为 YYYYYY。

@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() 将返回对 another 对象的引用,而不是在对象已经加载到当前上下文中时传入的引用.所以,我宁愿返回 merge() 的结果并像这样编写 update() 方法:

@PersistenceContext
private EntityManager em;

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

然后,像这样使用它(跳过初始化部分):

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

关于java - 如何使用 EntityManager (JPA) 在 DAO 中实现 update() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1809159/

相关文章:

java - 将数据从我的表转换为 Mahout 数据模型

java - 为 JPA EntityManager persist() 方法提供另一个操作

orm - 如何处理指向通用接口(interface)的指针的 JPA 注释

hibernate - createEntityManager 在 org.hibernate.engine.transaction.internal.jta.JtaStatusHelper.getStatus 抛出 java.lang.NullPointerException

java - 在 hql 中运行查询时出现语法错误

java - 具有该名称 [<name>] 的 hibernate 参数不存在

java - eclipse 中的 R.menu 错误

java - JMS 中客户端确认模式的消费者向谁发送确认

java - 如何让 IntelliJ 识别 wicket html 标签?

java - joda.time.DateTime.toLocalDateTime() NoSuchMethodError