gpt4 book ai didi

spring - 使用 Hibernate 保存并锁定实体

转载 作者:行者123 更新时间:2023-12-03 03:38:13 24 4
gpt4 key购买 nike

我正在寻找一种方法来保存并立即锁定数据库上的实体,以避免其他线程在线程创建者结束之前访问该实体。
我正在使用 Hibernate 4.3.11 和 Spring 4.2.5。
提前致谢。

最佳答案

虽然有锁定模式-LockMode.WRITE - 但正如文档所述

A WRITE lock is obtained when an object is updated or inserted. This lock mode is for internal use only and is not a valid mode for load() or lock() (both of which throw exceptions if WRITE is specified)..

如果只是插入行,那么您无法使用 hibernate 专门锁定数据库行,因为这些行尚未提交。当您的代码(无论是否处于 hibernate 状态)在数据库中插入行但尚未提交时,就会持有事务锁,这些锁会在事务提交时释放。锁的本质以及内部发生的方式是特定于数据库的。但是,如果您有兴趣锁定某些行(已经存在),那么您可以使用

查询数据
session.get(TestEntity.class, 1, LockMode.PESSIMISTIC_WRITE);

这将在事务持续时间内持有悲观锁(通常通过发出 SELECT .... FOR UPDATE),并且没有其他线程/事务可以修改已获取锁定的数据。

关于spring - 使用 Hibernate 保存并锁定实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38696622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com