Istnieje jednostka:Wiosna danych: transakcja wycofywania na ponawiania
@Entity
class A {
...
@Version
int version;
}
A
przypadki zmiana zaimplementowana w optymistyczny sposób:
@Transactional(rollbackFor = {StaleStateException.class})
@Retryable(value = {StaleStateException.class})
public void updateA() {
A a = findA();
B b = new B();
// Update "a" somehow
a.update();
// "b" is saved on each retry!
save(b);
}
Jak podano w komentarzach, wydaje się, że transakcja nie jest rollbacked gdy StaleStateException
występuje, więc instancja jest zapisywana przy każdym ponawianiu.
Czy można ponownie wykonać transakcję po ponowieniu próby?
Pożądanym zachowaniem jest zapisanie b
tylko po pomyślnej aktualizacji a
.