首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >事务隔离和实体锁定的JPA区别

事务隔离和实体锁定的JPA区别
EN

Stack Overflow用户
提问于 2015-06-11 09:15:53
回答 2查看 3.1K关注 0票数 9

我读过有关事务隔离级别的文章。它用于防止并行事务执行错误。很明显。也有实体可用的锁定模式。我知道他们是怎么工作的。

但我找不到我需要锁的原因?我已经使用了事务隔离级别。为什么我要用锁?隔离级别和锁定会导致相同的工作吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-11 09:59:51

引言

有不同的锁定类型和隔离级别。一些锁定类型 (乐观*)是在JPA级别上实现的(例如。在EclipseLink或Hibernate中,其他(悲观*)由JPA-提供程序委托给DB级别。

解释

隔离级别和锁定是不一样的,但它们可能在某个地方相交。如果您有序列化的隔离级别(这是性能贪婪的),那么您不需要在JPA中执行任何锁定,因为DB已经这样做了。另一方面,如果选择READ_COMMITTED,则可能需要进行一些锁定,因为单独的隔离级别不能保证条目在同一时间内不会被另一个事务更改。

票数 6
EN

Stack Overflow用户

发布于 2015-06-12 06:08:38

事务隔离和JPA实体锁定都是并发控制机制。

事务隔离应用于JDBC连接级别,其作用域是事务生命周期本身(不能更改事务与当前正在运行的事务之间的隔离)。现代数据库允许您同时使用2PL (两相锁定)隔离级别和MVCC隔离级别(SNAPSHOT_ISOLATION或PostgreSQL隔离级别)。在MVCC中,读取器不阻塞作者,作者不阻止读者(只有作者阻止作者)。

Java持久化锁定API提供数据库级和应用程序级的并发控制,可分为两类:

  1. 显式乐观锁定模式:
代码语言:javascript
复制
- [OPTIMISTIC](http://vladmihalcea.com/hibernate-locking-patterns-how-does-optimistic-lock-mode-work/)
- [OPTIMISTIC\_FORCE\_INCREMENT](http://vladmihalcea.com/hibernate-locking-patterns-how-does-optimistic_force_increment-lock-mode-work/)
- [PESSIMISTIC\_FORCE\_INCREMENT](http://vladmihalcea.com/hibernate-locking-patterns-how-does-pessimistic_force_increment-lock-mode-work/)

乐观锁定在UPDATE/DELETE语句中使用版本检查,并在版本不匹配时失败。

  1. 显式悲观锁模式:
代码语言:javascript
复制
- [PESSIMISTIC\_READ](http://vladmihalcea.com/hibernate-locking-patterns-how-do-pessimistic_read-and-pessimistic_write-work/)
- [PESSIMISTIC\_WRITE](http://vladmihalcea.com/hibernate-locking-patterns-how-do-pessimistic_read-and-pessimistic_write-work/)

悲观锁模式使用特定于数据库的锁语法来获取读(共享)或写(排它)锁(例如。选择。(供更新)。

当您在较低的一致性隔离级别(READ_COMMITTED)上运行并且希望获得其作用域为从查询生存期升级到事务生存期的锁时,READ_COMMITTED是合适的。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30776518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档