【问题标题】:Changing Hibernate Session.FlushMode during the Session在会话期间更改 Hibernate Session.FlushMode
【发布时间】:2026-02-14 15:15:01
【问题描述】:

我的应用程序使用 FlushMode.AUTO 。 对于特定的服务方法调用,我想将 Hibernate Session.FlushMode 更改为 FlushMode.COMMIT 并在方法完成时恢复为 FlushMode.AUTO

问题:- 在会话期间更改 FlushMode 是否有任何问题/危险?

在会话期间更改 FlushMode 的原因:- 我正在使用 Hibernate 拦截器方法 (onFlushDirty) 来审核更改。 使用 FlushMode.AUTO 时,会发生多个会话刷新(FlushMode.AUTO 的行为)。因此,onFlushDirty 被多次调用,导致重复审计。 我通过将 FlushMode 更改为 COMMIT 在我期望进行审计的方法中解决上述问题。

【问题讨论】:

    标签: java hibernate interceptor hibernate-session


    【解决方案1】:

    触发自动刷新的最常见原因是在执行过程中使用执行查询。如果 Hibernate 检测到会话中的一些未刷新的更改可能会影响查询的结果,那么它会自动触发刷新。因此,当您的查询执行时,它会获取与您在会话中所做的更改一致的数据。

    所以,这取决于您的代码的作用。如果此行为不影响功能,则应该没问题。

    【讨论】: