@Service
@Transactional
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Autowired
private RoleRepository roleRepository;
@Transactional
public void save(String name) {
method1(name);
method2(name);
}
public void method1(String name){
userRepository.save(name)
}
public void method2(String name) {
roleRepository.save(name);// Error
}
}
public interface UserService {
void save(String name) throws Exception;
}
@PostMapping("/save")
public void save() throws Exception {
userService.save("SomeThing");
}
У меня есть 2 метода в методе сохранения. Как видите, method2 имеет ошибку.
Я запускаю программу, первый метод печатает в базу данных. Однако, если второй метод неверен, я хочу, чтобы процесс отката упал, а первый метод не был записан в базу данных. Как я могу это сделать?
Я пытался использовать аннотацию @Transaction
для method1 и method2, но ошибка продолжалась. И я попробовал Propagation.REQUIRES_NEW
, и Propagation.REQUIRED
, TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
никогда не менялся.