我有一个如下服务类:

@Transactional
@Component(value = "userServiceImpl")
public class UserServiceImpl implements UserService
{
  @Autowired
  private UserDao             userDaoiBatis;

  public boolean X()
  {
    // Call UserDao.A and UserDao.B in transaction.
  }
}


还有一个道类,例如:

@Transactional
@Component(value = "userDaoiBatis")
public class UserDaoiBatis extends SqlMapClientDaoSupport implements UserDao
{
  @Autowired
  private void injectSqlMapClient(SqlMapClient sqlMapClient)
  {
    setSqlMapClient(sqlMapClient);
  }

  @Override
  public boolean A()
  {
    throw new RuntimeException("Not implemented");
  }

  @Override
  public boolean B()
  {
    throw new RuntimeException("Not implemented");
  }
}


我如何在userServiceImpl.Z()中调用UserDaoiBatis.A()和UserDaoiBatis.B()作为事务的一部分?

最佳答案

您所设置的内容看起来正确。事务将由UserServiceImpl开始,然后两个对UserDaoiBatis的调用都将继承现有事务(@Transactional默认为REQUIRES传播)。您可以通过在AbstractPlatformTransactionManager类上启用调试级别日志记录来确认这一点。

请注意,在A()引发异常的情况下,tx将回滚。

07-26 04:35