当我阅读spring应用程序的遗留代码时,我发现 entityManager.flush
方法在方法中调用,该方法由@transaction注解。我想,这个 flush
是redundency,因为spring将在方法成功结束时自动提交它。
@Autowired
private IJpaHelper jpaHelper;
@Transactional
public PosUpdateResponseBO updatePos(PosUpdateRequestBO request, boolean skipUpdateOnDeactivate) {
//it invokes entityManager.merge method to create or update a new POS row
posService.createPos(pos);
jpaHelper.flush();
// do some other work
}
@Component
public class JpaHelper implements IJpaHelper{
@PersistenceContext
private EntityManager em;
@Override
public void flush() {
em.flush();
}
}
现在它抛出一个关于一个pos实体的乐观锁的异常。那么,我猜,也许合并方法被调用了两次,一次在 flush
,另一个在 commit
交易记录?
这会导致重复合并吗?谢谢。
暂无答案!
目前还没有任何答案,快来回答吧!