hibernate—如果在spring事务期间调用entitymanager.flush,会发生什么情况?

4ngedf3f  于 2021-07-24  发布在  Java
关注(0)|答案(0)|浏览(182)

当我阅读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 交易记录?
这会导致重复合并吗?谢谢。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题