java - 我们如何使用 JPA 和 Hibernate 设置 Read Uncommitted 隔离级别?
问题描述
在他的名著《Java persistence with Hibernate》中,我们可以读到以下内容:
“持久性上下文是持久性实体实例的缓存......自动脏检查是这种缓存的好处之一。另一个好处是实体的可重复读取和工作范围缓存单元的性能优势......你不需要做任何特别的事情来启用持久性上下文缓存。它总是打开的,并且由于所示的原因,不能被关闭。
这是否意味着使用 Hibernate 永远无法实现“读取未提交”的事务隔离级别?
解决方案
这是否意味着使用 Hibernate 永远无法实现“读取未提交”的事务隔离级别?
不,它没有。Hibernateapplication-level repeatable reads
为实体提供。这与DB-level repeatable reads
适用于任何查询的不同。
所以,如果你想要一个自定义的隔离级别,比如REPEATABLE_READ
给定事务执行的所有查询,而不仅仅是获取实体,那么你可以像这样设置它:
@Transactional(isolation = Isolation.REPEATABLE_READ)
public void orderProduct(Long productId) {
...
}
现在,您的问题标题说:
(如何)我们可以使用 Hibernate/JPA 实现 Read Uncommitted 隔离级别吗?
如果您使用的是 Oracle 和 PostgreSQL,则无法执行此操作,因为Read Uncommitted
不受支持,您将获得READ_COMMITTED
。
对于 SQL Server 和 MySQL,设置如下:
@Transactional(isolation = Isolation.READ_UNCOMMITTED)
推荐阅读
- java - 用于 rest api 项目的 Spring Boot 战争或 jar
- c# - MVC Html.BeginForm 和 Javascript ajax 调用重叠
- angular - Angular 5 Rxjs 服务在 NgOnInit 中返回数据“未定义”
- mqtt - MQTT:没有收到离线消息
- python - 将列表的字典展平为数据框
- c# - WPF ListView 不缓存图像
- sql - 从文本文件读取值以在 WHERE 子句和 YYYY-DD-MM 本地化 DATETIME 中使用的 SQL 错误
- javascript - jQuery UI Draggable:鼠标移动速度比可拖动 div 快
- vba - VBA:从范围2中的范围1查找日期->如果匹配则颜色单元格
- laravel - Laravel 5.6 多对多关系中更新、存储和删除的正确方法