2009-11-27 79 views
16

什麼是實現簡單更新的標準方式?如何使用EntityManager(JPA)在DAO中實現update()方法?

示例:我們的用戶電話號碼爲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 
} 
+0

em.merge( transientUser)? – marcosbeirigo 2009-11-27 14:58:50

+0

也許,我不確定 – Roman 2009-11-27 15:06:44

+0

實際上,這是我現在擁有的。但是由於配置單元測試的上下文並不那麼容易,我還沒有對它進行測試。 – Roman 2009-11-27 15:08:35

回答

33

按照JPA規範,EntityManager#merge()將返回另一個對象的引用比對象爲alrea時傳入的對象dy在當前上下文中加載。所以,我寧願返回merge()的結果並寫入update()方法是這樣的:

@PersistenceContext 
private EntityManager em; 

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

然後,使用這樣的(跳過初始化部分):

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