【问题标题】:How to implement update () method in DAO using EntityManager (JPA)?如何使用 EntityManager (JPA) 在 DAO 中实现 update() 方法?
【发布时间】:2010-12-21 00:25:19
【问题描述】:

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

示例:我们有电话号码为 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
}

【问题讨论】:

  • 其实,这就是我现在所拥有的。但是我还没有测试它,因为配置单元测试的上下文并不容易。

标签: java jpa entitymanager


【解决方案1】:

【讨论】:

    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2014-12-08
      • 2011-01-30
      • 2019-10-28
      • 1970-01-01
      • 2020-03-14
      • 2013-06-05
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      相关资源
      最近更新 更多