【发布时间】:2013-06-17 23:22:12
【问题描述】:
下面是我正在尝试做的事情的简要概述。我想通过一个方法调用将记录推送到数据库中的两个不同表。如果有什么失败,我希望一切都回滚。因此,如果 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;
}
}
其中MyDAO dao是一个接口,使用mybatis映射到数据库,使用Spring注入设置。
现在如果insertIntoB 失败,来自insertIntoA 的所有内容仍会被推送到数据库。我该如何纠正这种行为?
编辑:
我修改了课程以更准确地描述我想要实现的目标。如果我直接运行insertIntoAAndB,如果有任何问题回滚工作,但如果我从insertRecords 调用insertIntoAAndB,如果出现任何问题回滚不起作用。
【问题讨论】:
标签: java spring transactions