【发布时间】:2017-10-14 13:52:07
【问题描述】:
我有一个场景,我必须将数据插入到多个表中。如果一个查询失败,那么我想回滚最后一个执行的查询
我的服务方法是
@Service
@Transactional
public class ServiceNameImpl implements ServiceName{
@Autowired
private ABCRepository abcRepository;
@Autowired
private BCDRepository bcdRepository;
@Override
public SChResource save(SchData schData){
SchSch sch = new SchSch();
Contact con = new Contact();
sch.setName(schData.getName());
abcRepository.save(sch); --first insertion
con.setAddress(schData.getAddress());
bcdRepository.save(con); --second insertion
return null;
}
}
我希望如果第一次插入执行并且第二次插入失败,那么第一次插入将回滚,如果第一次插入失败并且第二次插入执行,那么第二次插入将回滚。
请建议我该怎么做。
【问题讨论】:
-
看起来您想让
save()方法具有事务性。 -
这应该已经可以工作了,因为您的服务是
@Transactional如果它不起作用,那么这个问题包含的信息太少,无法回答您的问题。 -
@M. Deinum 我对应该使用@Transaction(readOnly=true) 或@Transactional(readOnly=false) 感到困惑。因为在这个服务类中还有一些其他方法我不想让它们成为事务性的
-
@Kayaman 是的,我想让我的保存方法具有事务性。但是这个服务类中还有一些其他的方法,我不想让它们成为事务性的
-
我没有告诉你让其他方法具有事务性,是吗?将注释放在方法而不是类上。然后阅读文档,这样您就不必对 Spring 的工作原理感到困惑了。
标签: java spring hibernate repository spring-data-jpa