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