Spring ROOアプリケーションをセットアップし、永続性をOpenJPAに設定し、いくつかのエンティティーを作成しました。次に、SpringMVCをApacheWicketに置き換えました。スタッフは正常に機能しているようで、顧客エンティティのリストを正常に表示しました。
次は、顧客の編集ビューでした。今のところ、フォームモデルとしてOpenJPAエンティティを直接使用するWicketフォームを作成したため、エンティティクラスにSerializableを実装する必要がありました。
さて、OpenJPAの永続性を正しく実装する方法がわかりません。今、私が得ているのは次のとおりです。
@Override
protected void onSubmit() {
try {
if (customer.getId()!=null) {
customer.merge();
}
else {
customer.persist();
}
}
catch (Exception e) {
throw new Error(e);
}
super.onSubmit();
}
これは機能しますが、Customerオブジェクトごとに1回だけです。何とかして。つまり、フォームを1回送信すると、新しい顧客(.persist())と既存の顧客(.merge())の両方で機能します。ただし、同じ顧客に対してフォームを再度送信すると、このエラーが発生します(ここにいくつかの改行を追加しました)。
<openjpa-2.0.0-r422266:935683 nonfatal store error>
org.apache.openjpa.persistence.OptimisticLockException:
An optimistic lock violation was detected when flushing object instance "no.magge.iumb.domain.crm.PrivateCustomer-379" to the data store.
This indicates that the object was concurrently modified in another transaction.
私の質問は、OpenJPAを維持する正しい方法は何ですか、そしてなぜそのエラーが発生するのですか?
Wicketに関して:取り外し可能なCustomerモデルを使用して別のWicket IModelを作成する必要がありますが、それがこれらの問題の原因である可能性がありますか?
アドバイスをたくさんありがとう!