Java JPA事务组合为只读和读未提交
使用Spring事务,JPA与Hibernate实现 我已将一种方法标记为:Java JPA事务组合为只读和读未提交,java,spring,hibernate,jpa,transactions,Java,Spring,Hibernate,Jpa,Transactions,使用Spring事务,JPA与Hibernate实现 我已将一种方法标记为: @Transactional(readOnly=true, isolation=Isolation.READ_UNCOMMITTED) 只读和读未提交的组合有效吗?我在一个方法上使用它,该方法的原生sql是报表页面的select语句。首先,我将它标记为readuncommitted,这样它就不会在频繁更新的表上等待,因为即使在处理期间,用户也希望生成报告(如果发生这种情况,将显示一条警告)。其次,我标记为readon
@Transactional(readOnly=true, isolation=Isolation.READ_UNCOMMITTED)
只读和读未提交的组合有效吗?我在一个方法上使用它,该方法的原生sql是报表页面的select语句。首先,我将它标记为readuncommitted,这样它就不会在频繁更新的表上等待,因为即使在处理期间,用户也希望生成报告(如果发生这种情况,将显示一条警告)。其次,我标记为readonly是为了告诉JPA不要将实体保存在持久性上下文中
这是正确的理解吗?因为在处理期间需要中间数据,所以读取未提交隔离级别是有意义的。 只读事务将确保该特定事务中的所有sql语句都是Select语句,如果发现任何Insert/Update sql语句,它将立即抛出错误。
我认为ReadOnly只是一种额外的检查,以确保您在特定交易期间没有更新任何数据。感谢您的回答,并指出我对ReadOnly标志的错误理解。我读了更多关于只读标志的内容,看到了与您提到的相同的描述。我的后续问题是,您知道如何对事务进行注释(如果存在此类注释)以告诉JPA不要将实体保持在持久化上下文中吗?如果我没有弄错您的问题,您希望实体在事务结束时不要保持在持久化上下文中。然后,您可以在当前事务结束时通过调用entityManager.detach(entityName)分离这些实体。