EntityManager(JPA)を使用してDAOにupdate()メソッドを実装する方法は?
-
05-07-2019 - |
質問
単純な更新を実装する標準的な方法は何ですか?
例:電話番号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()
は、オブジェクトが既に現在のコンテキストでロードされたときに渡されたものとは別の別のオブジェクトへの参照を返します。 。したがって、 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
所属していません StackOverflow