1

HibernateはJavaトランザクションの開始時に悲観的ロックを実装できますか、それともJavaレルムでのすべての作業が完了したときに適用される悲観的ロックに依存し、変更はデータベーストランザクションの一部としてデータベースに適用されますか? ?

リモートWebサービスへの呼び出しが行われる途中のJavaトランザクションがあるので、これは非トランザクションであるため、ロールバックできません。Hibernateが処理対象のデータに対して悲観的なロックを保持している場合、Hibernateは別のスレッドがそれらのデータにすでに動作していることを認識しているため、トランザクションの処理をブロックする必要があります。Hibernateがそのようなロック自体を追跡しない場合、Javaトランザクションは続行され、Webサービスが呼び出され、DBコミットがブロックされます。

私が本当にやりたいのは、Javaトランザクションを開始し、別のスレッドが別のトランザクションを開始しようとし、関連するデータに対してすでに進行中のトランザクションがあるため、ブロック/失敗することです。

HibernateがEHCacheを2LCとしてTerracottaと分散して使用する場合、ロック動作はどのように影響を受けますか?

4

2 に答える 2

3

Hibernateの悲観的ロックはデータベースロックです。ロックはデータベースに委任されます。第2レベルのキャッシュはそれとは何の関係もありません。

于 2011-11-28T09:44:27.403 に答える
0

「Hibernateはメモリ内のオブジェクトをロックしません。」

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/transactions.html

ちょっとしたRTFMのようなものはありません:)

于 2011-11-28T12:09:43.277 に答える