フィールドの 1 つで @version を使用するエンティティがあります。2 つのトランザクションがこのエンティティを同時に変更すると、1 つが失敗し (楽観的ロック例外が発生し)、もう 1 つが成功するようにしたいと考えています。
このテストを単一の JVM で実行すると正常に動作しますが、クラスター環境で実行すると、2 つのトランザクションが成功し、楽観的ロックはスローされません。
public class DeploymentLock {
@Column(name = "DEPLOYMENT_COUNTER")
private Long deploymentCounter;
@Version
@Column(name = "ENTITY_VERSION")
private Long version;
...
}
私は何かを逃していますか?@Version で "@Generated(GenerationTime.ALWAYS)" を使用する必要がありますか?
ちなみに、アプリでSpringとhibrnateを使用しています...何か考えはありますか?