遇到一个很急的问题,我用的是声明式事务。
样式参照论坛的涛ge的代码,有这样一个需求,比如在下面的代码中,假如save方法中的
如果address 是 aaaa,那么要求事物强制回滚掉,这个地方该怎么解决啊
package cn.javass.spring.chapter9.service.impl;
//省略import
public class AnnotationUserServiceImpl implements IUserService {
...
@Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.READ_COMMITTED)
@Override
public void save(final UserModel user) {
userDao.save(user);
if ("aaaa".equals(user.getAddress())){
// 事物要求回滚
这个地方的代码怎么写?,如何将事物强制回滚掉?
}
addressService.save(user.getAddress());
}
}
// 事物要求回滚
这个地方的代码怎么写?,如何将事物强制回滚掉?
throw new RuntimeException即可。 如果mysql保证不是myisam引擎
public void save(final UserModel user) {
if (!"aaaa".equals(user.getAddress())){
userDao.save(user);
addressService.save(user.getAddress());
}
}
[code="java"]
@Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.READ_COMMITTED,[b][i]rollbackFor = Exception.class[/i][/b])
@Override
public void save(final UserModel user) {
userDao.save(user);
if ("aaaa".equals(user.getAddress())){
[b][i]throw new Exception("XXXX");[/i][/b]
}
addressService.save(user.getAddress());
}
[/code]
可以直接throw一个异常。。这样就rollback事务了。