下面是我正在尝试做的事情的简要概述。我想通过一个方法调用将记录推送到数据库中的两个不同表。如果有任何失败,我希望一切都回滚。因此,如果insertIntoB
失败,我希望将提交的任何内容insertIntoA
回滚。
public class Service {
MyDAO dao;
public void insertRecords(List<Record> records){
for (Record record : records){
insertIntoAAndB(record);
}
}
@Transactional (rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
public void insertIntoAAndB(Record record){
insertIntoA(record);
insertIntoB(record);
}
@Transactional(propagation = Propagation.REQUIRED)
public void insertIntoA(Record record){
dao.insertIntoA(record);
}
@Transactional(propagation = Propagation.REQUIRED)
public void insertIntoB(Record record){
dao.insertIntoB(record);
}
public void setMyDAO(final MyDAO dao) {
this.dao = dao;
}
}
whereMyDAO dao
是一个接口,使用mybatis映射到数据库,使用Spring注入设置。
现在,如果insertIntoB
失败,所有内容insertIntoA
仍然会被推送到数据库。我该如何纠正这种行为?
编辑:
我修改了课程以更准确地描述我想要实现的目标。如果我insertIntoAAndB
直接运行,如果有任何问题,回滚将起作用,但如果我insertIntoAAndB
从调用,如果出现任何问题,insertRecords
回滚将不起作用。