如何判断当前会话是否脏?

当且仅当数据库发生更改时,我想发布一个事件。我在 @Transaction 下运行的是 Spring 上下文,我想出了这个检查:

    Session session = entityManager.unwrap(Session.class);
    session.isDirty();

对于新的(瞬态)对象,这似乎失败了:

@Transactional
public Entity save(Entity newEntity) {
    Entity entity = entityRepository.save(newEntity);
    Session session = entityManager.unwrap(Session.class);
    session.isDirty(); // <-- returns `false` ):
    return entity;
}

根据这里的答案/sf/answers/368803221/我希望它能够工作并返回 true。

我错过了什么?

更新
考虑到@fladdimir 的回答,虽然这个函数是在事务上下文中调用的,但我确实@Transactional在函数上添加了(来自 org.springframework.transaction.annotation)。但我仍然遇到相同的行为。isDirty 返回 false。

此外,正如预期的那样,当程序在session.isDirty().

UPDATE_2
我还尝试在调用 repo save 之前更改会话刷新模式,也没有任何影响:

    session.setFlushMode(FlushModeType.COMMIT);
    session.setHibernateFlushMode(FlushMode.MANUAL);

以上是如何判断当前会话是否脏?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>