私はWildfly 10で動作するJava/Spring Webアプリケーションを使用しています.JAを設定して、更新と削除の文を実行するのが一般的な方法です。たとえば、httprequestがサーバーに入り、Person
レコードに関するすべての詳細を表示するとします。私はこのレコード次に、この人物の詳細が画面に表示されているJPA /エンティティマネージャを使用してオブジェクトを更新する
class PersonDao
{
@PersistenceContent
entityManager entityManager
public Person findPerson(int id)
{
assert(id >= 0); //pseudocode
Person p = this.entityManager.find(Person.class,id);
assert(p != null); //pseudocode
return p;
}
}
を見つけるために、エンティティ・マネージャを使用しますが、要求が終了したスレッドがなくなっています。エンティティマネージャの添付されたPersonレコードは、自分のコードでアクセスできなくなりました。
時間が経つと、ユーザーが年齢を更新するために新しい要求が開始されます。現在私のDAOクラスでは、私はいつもレコードを再検索して、それが私の永続コンテキストに存在すると確信していますが、重複して退屈なようです。それを更新する必要がある(再び)あなたがこれを行う方法が正しいPersonオブジェクトを取得するには
Person p = this.findPerson(id);
を呼び出して、正しい
public void updatePersonAge(int id, int newAge)
{
assert(newAge >= 0)
Person p = this.findPerson(id);
p.setAge(newAge);
this.entityManager.persist(p);
}
persistは更新のためには機能しません。使用する呼び出しはmerge()であり、おそらく冗長であっても、JPAは管理対象エンティティの変更を追跡し、その変更を自動的にデータベースと同期させます。 – Gimby