了解jpa锁与事务隔离级别

时间:2015-07-28 11:20:02

标签: java jpa isolation-level locks

我试图了解这些概念之间的关系。 jpa锁是否是从java中提供/调用DB中的事务隔离级别的方法?或者它是分离机制,那么差异(它们的目的)是什么?

1 个答案:

答案 0 :(得分:4)

Locking表示您可以防止多个用户同时更新实体。 有两种不同类型的锁机制。在悲观锁定场景中,在执行更新之前,表中的行必须由用户锁定,并且其他用户将无法执行目标实体的更新。更新行后,必须解锁表,以便其他用户也可以修改目标记录。另一种选择是使用乐观锁定。在这样的实现中,每个实体都具有版本列(可以使用JPA @Version)。如果用户更新了实体,则还会更新其值或时间戳。如果另一个用户使用具有过期值的实体执行更新,则抛出OptimisticLockException,并且用户或应用程序必须获取新实体并合并更改。 需要此功能来防止实体丢失更新,其中最后一次提交将覆盖所有其他更改。

Transaction Isolation Levels负责数据库读取的一致性。例如,如果使用“READ UNCOMMITTED”,则可以在事务完成之前查看数据库正在更新的更改。这意味着,如果发生错误并且事务被回滚,则另一个用户将获取从未存储在数据库中的更改。 “READ COMMITTED”将仅提供已提交的更改。

没有'完美'的隔离级别。事务隔离级别的“正确”值取决于应用程序中的用例。例如,用于时间跟踪的JIRA Tempo插件标记未提交红色的记录,以显示数据未决。