2009-05-01 13 views
2

私のアプリケーションにhibernate、spring、strutsフレームワークを使用しています。Hibernate @Versionフィールドエラー

私のアプリケーションでは、各テーブルには、レコードの更新を追跡するためのバージョンという1つのフィールドがあります。

私はバージョン0を持っている私の国のテーブルの既存のレコードを更新していますたびに、それは1

に細かい&更新にレコード更新バージョンのフィールドに動作しますが、私はそのバージョン1レコードを更新しようとしている時はいつでも、それは次のようにエラーが表示されます:

org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException: Object of class [com.sufalam.business.marketing.model.bean.Country] with identifier [3]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.company.business.marketing.model.bean.Country#3] 

解決方法はありますか?

+0

コードを投稿できますか? –

答えて

3

Hibernateのバージョン欄ではoptimistic concurrency controlを実装できます。

オブジェクトを更新するたびに、Hibernateは、データベースに格納されているバージョンの値がオブジェクトのバージョンの値と同じであるかどうかをチェックします。 2つが異なる場合、StaleObjectStateExceptionがスローされます。つまり、現在のセッションが読み込まれ、編集され、保存されている間に、他の誰かがオブジェクトを更新したことを意味します。

オブジェクトのバージョン値が正しい値に設定されていることを確認する必要があります。場合によっては、セッションからオブジェクトを切り離してマージして、値のバージョンの列が正しく設定されていない場合(たとえば、フォームから値を取得するときにWebアプリケーションで)

0

"行が別のトランザクションによって更新または削除されました"。私がこれを受け取った最後の時間は、複数のorg.hibernate.Sessionオブジェクトにまたがって広がったことをやっていました。

0

私は正確に覚えていませんが、保存したインスタンスにハングアップするはずですか?少なくとも、JPAを採用するときは、マージメソッドからの戻り値があります。

関連する問題