我有一些自动装配的接口扩展了 JpaRepository。他们每个人都有针对不同实体的“更新” hql 方法。我从服务的方法中调用这些方法。
如果其中一个将失败,我如何使所有这些都在一个事务中执行以回滚所有数据?
服务具有@service 和@transactional 属性,但它没有帮助。
- - - - - - - - - - - - 更新
这里举个例子。repository1.updateMethod() 和 repository2.updateMethod() 工作正常,repository3.save 由于约束错误而引发异常。结果,我看到 repository1 和 repository2 方法的结果已保存。我需要它来回滚。
@ Service
@ Transactional(rollbackFor = {RuntimeException.class})
public SomeService {
@ Autowired SomeRepository repository1;
@ Autowired AnotherRepository repository2;
@ Autowired ThirdRepository repository3;
...
@ Transactional(rollbackFor = {RuntimeException.class})
public void SomeMethod(SomeEntity obj, String someNewValue) {
try {
repository1.updateMethod();
repository2.updateMethod();
obj.setValue(someNewValue);
repository3.save(obj);
} catch (Exception ex) {
throw new RuntimeException();
}
}
}