EntityManager(JPA)を使用してDAOにupdate()メソッドを実装する方法は?

StackOverflow https://stackoverflow.com/questions/1809159

  •  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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top