日期:2014-05-19  浏览次数:20758 次

关于Spring事务控制
@Override
public void addUser(User user) {
  try{
  Log log = new Log();
  log.setContent("添加了"+user.getUsername()+"用户");
  logDao.addLog(log);
  userDao.save(user);
  }catch (Exception e) {
  e.printStackTrace();
  }
}

这个是Service层UserService类的addUser()方法,我把service层配置了事务
现在如果userDao.save(user) 这个方法出错了,logDao.addLog(log) 这条记录会回滚,这是正确的
但是如果
@Override
public void addUser(User user) {
  try{
  Log log = new Log();
  log.setContent("添加了"+user.getUsername()+"用户");
  logDao.addLog(log);
  userDao.save(user);
  throw new RuntimeException();
  }catch (Exception e) {
  e.printStackTrace();
  }
}
这样执行完userDao.save(user);(假如这个方法是正确的)往下执行时抛出异常,结果是这两条数据都插进去了,我想要的是这两条也回滚 应该怎么做

------解决方案--------------------
方法里try catch 或者抛出 都不会回滚的 必须把try cath删了
------解决方案--------------------
要想回滚,就要在catch中写个回滚
------解决方案--------------------
Java code

public void addUser(User user)throws Exception {
  try{
  Log log = new Log();
  log.setContent("添加了"+user.getUsername()+"用户");
  logDao.addLog(log);
  userDao.save(user);
  throw new RuntimeException();
  }catch (Exception e) {
  e.printStackTrace();
  }
}

------解决方案--------------------
声明addUser方法抛出XXXException