Hibernateの悲観ロックはどのように使用しますか?
Hibernateで悲観的ロックを使用するには、以下の手順に従います。
- エンティティクラスに、バージョン番号やロックを表すためのプロパティを追加してください。例えば、
@Entity
public class User {
@Id
private Long id;
// 添加版本号属性
@Version
private int version;
// 其他属性...
}
- ロックモードタイプ.PESSIMISTIC_WRITE
entityManager.find(User.class, userId, LockModeType.PESSIMISTIC_WRITE);
- Hibernateは、エンティティオブジェクトの更新操作中に、自動的に悲観ロックを追加します。
User user = entityManager.find(User.class, userId, LockModeType.PESSIMISTIC_WRITE);
user.setName("New Name");
// 其他更新操作...
- Hibernateはトランザクションをコミットする際、自動的に悲観ロックを解除します。
悲観ロックを使用する際には注意が必要であり、他のトランザクションは悲観ロックがかかっているエンティティオブジェクトを読み取ったり変更したりすることはできず、ロックを持っているトランザクションがロックを解放するまで待つ必要があります。そのため、悲観ロックを使用する際は慎重に行う必要があり、ロック競合が性能問題を引き起こさないように注意する必要があります。