8

@VersionSpring Data REST でJPA を使用できますか?

Spring Data REST 1.1.0.M1 では、エンティティ ID を公開するようにリポジトリ エクスポーターを構成できます。これにより、@Version注釈付きフィールドも公開されます。PUTそのため、古いバージョン番号のエンティティにアクセスしようとすると、 OptimisticLockException. しかし、それは起こりません。代わりにPUT、バージョン番号が、設定した古いバージョンではなく、常に厳密にインクリメントされることを除いて、(データの更新を含めて) 成功します。

ここで、動作が未定義であるため、バージョン番号を自分で設定することは想定されていないことを読みました。それは理にかなっている。しかし@Version、エンティティへの参照ではなく、エンティティの JSON 表現しか持っていない場合、これは役に立たないようです。JSON 表現では、バージョン番号をサービスに送り返す必要があり、最終的にはcall setVersion()、これは未定義の動作につながります。

状況を正しく理解していますか?@VersionSpring Data REST で使用できますか?

更新: Marten の応答を考慮して、楽観的なロック機能を実現するために JPA イベントを使用することになりました。ここにアプローチを書きました:

http://springinpractice.com/2013/09/14/optimistic-locking-with-spring-data-rest/

4

1 に答える 1

3

いいえ、それは Spring Data REST の使用とはあまり関係がありません。何が起こるかは未定義であるため、バージョンを自分で設定することはできないとすでに述べています(私自身もこの楽しい経験をしました)。通常の形式のデータを投稿し、現在のバージョンをセッションに保存しない場合も、基本的に同じ問題があります ( @SessionAttributes)。

私たちが最終的にやったのは、(実際にバージョンフィールドを設定できるように)チェックを行う休止状態のインターセプター(今ではリスナーになるだろう)を書いたことです。これはあまり問題なく機能したため (ただし、それは約 6 年前のことです)、Hibernate が変更され、現在は別の動作をしている可能性があります。

于 2013-09-13T08:36:54.880 に答える