У меня следующий код в одном из моих услуг:Spring данных - Оптимистичный механизм повтора не работает должным образом
@Override
@Transactional
@RetryConcurrentOperation(exception = Exception.class, retries = 12)
public void test() {
Player player = this.playerRepository.findPlayerById(1L);
player.setFirstName("SomeName");
}
механизм повторных попыток я использую тот, который был описан здесь: http://josiahgore.blogspot.co.il/2011/02/using-spring-aop-to-retry-failed.html
проблема, когда я получаю оптимистическую повторную попытку (вторые повторные попытки) я получаю исключение:
Caused by: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [xxx]
Интересно это в том, что механизм работает, когда Я удаляю транзакционной аннотацию и внутри, не транзакционной функции я звоню другой транзакционный метод:
// THIS WORKS:
@Override
@RetryConcurrentOperation(exception = Exception.class, retries = 12)
public void test() {
execute();
}
@Override
@Transactional
public void execute() {
Player player = this.playerRepository.findPlayerById(1L);
player.setFirstName("SomeName");
}
Любые идеи, почему этот механизм аспект повторных попыток не удается, когда это время вызывается из транзакционной функции?
в конце концов @Transactional работа в этих случаях? Я подумал, что там есть две проблемы: один ват, что транзакционная транзакция не работает для повторных вызовов, а вторая запись в блоге не будет работать для версий, но это был ответ, который вы искали, или это что-то еще? –
Попробуйте это решение: https://stackoverflow.com/a/45543257/516167 – MariuszS