休眠刷新旧对象状态

时间:2019-01-14 11:45:01

标签: java hibernate

当前,我有一个线程可以从数据库中检索对象,对其进行操作并提交。但是,在这种情况发生后,Hibernate将尝试在操作之前用同一对象的状态刷新(在同一线程上),但幸运的是由于数据陈旧而失败。
下面的代码片段是修改和提交实体的地方,效果很好,但是数据库日志表明,在这种情况发生之后,HibernateTransactionManager尝试刷新其状态,它认为对应于在下面的代码片段之前该实体的表示方式被执行。

TransactionStatus tx = createNewTransaction();
Entity current = Entity.findById(entityId);
if(shouldProceed(current)){
    current.setResult(newResult);
    ...
    Entity.persist(current);
    commit(tx);
}

Entity.findById(Long id)在会话上调用get(Class clazz,Serializable id)。
Entity.persist(Entity e)调用Session.saveOrUpdate(T实体),并且从那里似乎没有调用任何非Hibernate代码。
commit(TransactionStatus tx)使用AbstractPlatformTransactionManager.commit(TransactionStatus状态),并且不使用任何特定于我们代码的功能(除异常处理之外)。

shouldProceed(Entity e)不会修改实体状态,并且在发生这种情况后,没有显式调用来刷新状态。
当应该为实体更新了Hibernate中的状态时,Hibernate如何将旧状态用作刷新状态?

0 个答案:

没有答案