最近我一直在研究数据库事务和一篇文章的引用如下
JPA通过@Version注释提供行版本控制的自动支持。当您有具有@Version注释字段或属性的实体时,乐观锁定将自动启用。
我的理解是,数据库隔离级别策略是使用不同的锁来维护的,比如
读未提交:用独占写锁实现
Read committed:使用共享读锁和独占写锁实现。
等等。所以,事务隔离是通过不同的锁实现的,我猜是通过使用悲观锁实现的。
我的问题是,当一个字段被声明为@Version annotatted时,它是否覆盖了底层的默认隔离级别,并且发生了乐观锁定?

最佳答案

不,它们是不同的东西。默认情况下,隔离级别配置为read-commited,因此在事务提交之前无法读取任何更改。
如果您决定通过@Version使用乐观锁定,则根本不会更改隔离级别,但假设您要使用read-commited隔离级别,因为我认为在使用乐观锁定时使用read-uncommitedread-serialized是没有意义的,但您可以。
在创建事务时定义隔离级别,通常为事务指定只读模式、隔离级别、传播模式和名称。
乐观锁由ORM基础结构控制,在持久化时要注意对象的正确数字版本。所以,它们是不同的东西。
希望有帮助!

10-07 13:48