最近我一直在研究数据库事务和一篇文章引用如下
JPA通过@Version注释提供行版本控制的自动支持。当您拥有@Version annotatted字段或属性的实体时,将自动启用乐观锁定。
我的理解是使用不同的锁(如
)维护数据库隔离级别策略我的问题是当一个字段被声明为@Version annotatted它是否覆盖了底层的默认隔离级别并且发生了乐观锁定?
答案 0 :(得分:2)
read-commited
,因此在事务提交之前不能读取任何更改。
如果您决定通过@Version
使用乐观锁定,则根本不会更改隔离级别,但假设您要使用read-commited
隔离级别,因为我认为它没有在使用乐观锁定时使用read-uncommited
或read-serialized
的意义,但你可以。
在创建事务时定义隔离级别,通常指定只读模式,隔离级别,传播模式和事务名称。
乐观锁定由ORM基础架构控制,在持久化时处理对象的正确数字版本。所以,它们是不同的东西。
希望它有所帮助!
答案 1 :(得分:1)
不,您无法使用JPA的乐观锁定覆盖基础数据库的隔离级别。
如果你能以某种方式做到这一点,那就做不到这一点。
大多数数据库都采用 READ_COMMITED 隔离级别作为默认值。
在 READ_COMMITED 隔离级别下考虑以下方案。
Product
实体尽管这种情况微不足道,但这些事情可能会在非平凡的情况下发生。
使用数据库的默认隔离级别乐观锁定可以避免这种意外情况。
希望这有帮助。