JPA事务组合readonly和read未提交

时间:2014-11-17 09:19:21

标签: java spring hibernate jpa transactions

使用Spring事务,JPA与Hibernate实现。

我已将方法标记为:

@Transactional(readOnly=true, isolation=Isolation.READ_UNCOMMITTED)

readOnly和read uncommitted的这种组合是否有效?我在一个方法上使用它,这个方法的本机sql是报表页面的select语句。首先,我将其标记为未提交读取,以便它不会在经常更新的表上等待,因为用户想要在处理时间期间生成报告(如果发生这种情况会显示警告)。其次,我标记为只读,告诉JPA不要将实体保留在持久化上下文中。

这是正确的理解吗?

1 个答案:

答案 0 :(得分:2)

由于在处理期间需要中间数据,因此READ_UNCOMMITTED隔离级别是有意义的。 ReadOnly事务将确保该特定事务中的所有sql语句都是Select语句,如果它找到任何Insert / Update sql语句,它将立即引发错误。 我认为ReadOnly只是一个额外的检查,以确保您在特定交易期间不更新任何数据。