Hej, mam pytanie związane z try-catchem. Tworzę apkę , w której chcę zmienić dane w bazie tylko i wyłącznie jeśli wszystko się powiedzie. Posłużę się pseudokodem, żeby to lepiej przedstawić:
Bigdecimal userBalance = user.getBalance();
Set<Transactions> userTransactions = user.getTransactions();
try{
BigDecimal newBalance= countBalance(..);
user.setBalance(newBalance);
user.addTransaction(..);
catch (Exception e){
//przywracanie danych z przed próby dokonania transakcji
user.setBalance(userBalance);
user.setTransactions(userTransactions);
throw new Exception("Transaction fail")
}
userRepository.save(user);
Czy zapisywanie stanu z przed transakcji i przypisywanie je w catchu nie jest przypadkiem zbędne? W razie gdy w try (np w metodzie countBalance() poleci exception, to i tak userRepository.save(user) nie zostanie wykonane i w bazie nie pojawią się niespójne dane.
Dobrze to rozumiem?
Ewentualnie czy można tego try-catcha zastąpić @Transactional nad metodą? Czy to działa tak, że jeśli gdziekolwiek w trakcie wykonywania metody poleci wyjątek, to jest przywracany stan z przed transakcji?