1

同じテーブルでの同時挿入操作の 1 つで、ConstraintViolationException を取得しています。

javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: 
could not insert:

この点で、Hibernate Optimistic Lock は役に立ちますか? 私が知る限り、楽観的ロックはデータベース内の同じレコードに対する更新/削除操作で機能します。

挿入クエリでも機能しますか?

ターゲット テーブル (エンティティ) にバージョン列を作成しました。しかし、それでも同じ例外が発生します (optimisticLockException または StaleObjectStateException はありません)。

4

1 に答える 1

4

古いデータで既存のデータが上書きされるのを防ぐために、楽観的ロックが使用されます。ある挿入を別の挿入で上書きすることはできないため、楽観的ロック チェックを実行しても意味がありません。データベースは既に独自の例外 (ConstraintViolation 例外) をスローしています。挿入が失敗した場合にフラッシュまたはコミットから取得できるのは PersistenceException だけです。すでに挿入されている場合は、persist を呼び出すときに EntityExistsException をスローするように JPA プロバイダーを構成できる場合があります。 -4131

于 2013-04-02T13:58:38.320 に答える