我在里面我的服务之一下面的代码:春数据 - 乐观重试机制不能正常工作
@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]
有趣,这是该机制WOR KS当我删除事务注释和非交易功能中我打电话的不同事务方法:
// 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