如何判断我是否在Spring中处理事务?

时间:2017-08-11 08:00:29

标签: java spring transactions spring-data-jpa

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

如何检查我是否在交易中?

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

2 个答案:

答案 0 :(得分:16)

您可以使用TransactionSynchronizationManager.isActualTransactionActive()检查交易是否有效。但是你应该在执行服务方法之前调用它。

您还可以使用

获取当前交易的状态
TransactionStatus status = TransactionAspectSupport.currentTransactionStatus();

此外,对您而言,最重要的一点是启用事务记录。

log4j.logger.org.hibernate.transaction=DEBUG,R
log4j.logger.org.springframework.transaction=DEBUG,R

答案 1 :(得分:0)

您可以使用

org.springframework.transaction.support.TransactionSynchronizationManager#isActualTransactionActive