Java 如何确定我是否处于Spring中的事务中?

Java 如何确定我是否处于Spring中的事务中?,java,spring,transactions,spring-data-jpa,Java,Spring,Transactions,Spring Data Jpa,我在Spring服务中遇到了持久性问题。Rest控制器R接收请求,并通过复杂的方式通过一些代码层调用服务S。S中的服务方法声明了一个事务;这应该是第一次启动事务。 但该服务的行为类似于之前已经启动的事务,并且我的一些数据对象将是会话的一部分(它们不能是会话的一部分)。 如何确定事务是否已处于活动状态?我已尝试注入EntityManager和/或JpaTransactionManager;但两者似乎都没有帮助 如何检查我是否在交易中 在我搜索所有这些层以寻找可能的嫌疑犯之前,我想确定这一点。您可以

我在Spring服务中遇到了持久性问题。Rest控制器R接收请求,并通过复杂的方式通过一些代码层调用服务S。S中的服务方法声明了一个事务;这应该是第一次启动事务。 但该服务的行为类似于之前已经启动的事务,并且我的一些数据对象将是会话的一部分(它们不能是会话的一部分)。 如何确定事务是否已处于活动状态?我已尝试注入EntityManager和/或JpaTransactionManager;但两者似乎都没有帮助

如何检查我是否在交易中


在我搜索所有这些层以寻找可能的嫌疑犯之前,我想确定这一点。

您可以使用TransactionSynchronizationManager检查事务是否处于活动状态。isActualTransactionActive()。但是您应该在执行服务方法之前调用它

您还可以使用获取当前事务的状态

TransactionStatus status = TransactionAspectSupport.currentTransactionStatus();
此外,对您来说,启用事务日志记录可能是一个很好的方法

log4j.logger.org.hibernate.transaction=DEBUG
log4j.logger.org.springframework.transaction=DEBUG
你可以用

org.springframework.transaction.support.TransactionSynchronizationManager#isActualTransactionActive

如果我得到TransactionSynchronizationManager.isActualTransactionActive()=true,但TransactionSpectSupport.currentTransactionStatus()抛出:范围内没有事务方面管理的TransactionStatus?如果您提供一些链接,这“=DEBUG,R”是什么意思?@qleoz12似乎有点输入错误。没有直接回答您的问题,但听起来你们和我们一样,也成了在视图中打开会话(OSIV)的牺牲品。默认情况下会启用它(出于历史原因)。查看更多详细信息。