繁体   English   中英

Hibernate 何时会锁定表行?

[英]When will Hibernate lock table row?

我不太了解表行锁定机制。

如果没有@Transactional的方法,我知道它会在.save()方法调用时锁定。

public void test() {
    B b = a.findById(1);
    a.save(b);
}

如果该方法使用@Transactional什么时候会锁定表行?

 @Transactional
    public void test() {
        B b = a.findById(1);
        B b2 = a.findById(2);
        a.save(b);
        a.save(b2);
    }

进入测试方法时锁定? 还是在第一次查询时锁定? 或在a.save(b)时锁定?

何时锁定一行取决于您使用的数据库、连接隔离级别和具体查询。 大多数数据库都实现了 MVCC 方案,因此除非明确请求,否则它们可以避免锁定行。 行上的 DML 语句(DELETE、UPDATE)将始终获取排他锁。 然后有各种数据库供应商特定的 SELECT 语句扩展,可用于告诉数据库锁定某些行。 当您指定显式锁定模式时,Hibernate 在幕后使用它。

在您的情况下,您没有指定锁模式,因此在调用 save 时数据库将隐式获取锁,这将执行 SQL UPDATE 语句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM