我有一个如下服务类:
@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将回滚。