【发布时间】:2015-11-18 18:10:55
【问题描述】:
我有这个 DAO:
@Transactional("transactionManager")
public class DAO{
public void save(String a){...}
}
我有这门课:
public class test{
...
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
public void save(){
DAO.save("a");
DAO.save("b");
}
}
我希望“保存”方法在抛出异常时回滚,但是当发生异常时它似乎不起作用它不回滚,什么是正确的方法? DAO 中的所有其他方法都是事务性的。有没有办法可以覆盖覆盖的事务设置?
编辑: 我已经更新为,但在抛出异常时仍然无法正常工作:
public class test{
...
public void save(){
Service.test(a,b);
}
}
public class Service{
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
public void testSave(object a, object b){
dao.updateEntry(a);
dao.updateEntry(b);
}
}
【问题讨论】:
-
我认为服务方法应该是事务性的,而不是 dao 方法。
-
@Jens 我应该将所有注释移动到服务层吗?因为我在 daos 中有很多不需要事务处理的方法,这就是我注释 dao 的原因。
-
大部分情况下事务在服务层方法上,因为方法中所有的dao访问都属于一个事务。所以这就是为什么注释应该在服务层方法上。
标签: java spring hibernate transactions propagation