Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA事务组合为只读和读未提交_Java_Spring_Hibernate_Jpa_Transactions - Fatal编程技术网

Java JPA事务组合为只读和读未提交

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

使用Spring事务,JPA与Hibernate实现

我已将一种方法标记为:

@Transactional(readOnly=true, isolation=Isolation.READ_UNCOMMITTED)
只读和读未提交的组合有效吗?我在一个方法上使用它,该方法的原生sql是报表页面的select语句。首先,我将它标记为readuncommitted,这样它就不会在频繁更新的表上等待,因为即使在处理期间,用户也希望生成报告(如果发生这种情况,将显示一条警告)。其次,我标记为readonly是为了告诉JPA不要将实体保存在持久性上下文中


这是正确的理解吗?

因为在处理期间需要中间数据,所以读取未提交隔离级别是有意义的。 只读事务将确保该特定事务中的所有sql语句都是Select语句,如果发现任何Insert/Update sql语句,它将立即抛出错误。
我认为ReadOnly只是一种额外的检查,以确保您在特定交易期间没有更新任何数据。

感谢您的回答,并指出我对ReadOnly标志的错误理解。我读了更多关于只读标志的内容,看到了与您提到的相同的描述。我的后续问题是,您知道如何对事务进行注释(如果存在此类注释)以告诉JPA不要将实体保持在持久化上下文中吗?如果我没有弄错您的问题,您希望实体在事务结束时不要保持在持久化上下文中。然后,您可以在当前事务结束时通过调用entityManager.detach(entityName)分离这些实体。