15

Hibernate 中的刷新和提交有什么区别?

4

2 回答 2

6

将 JDBC 连接的状态与内存中保存的对象的状态同步的过程称为刷新。

根据 FlushMode 设置,这发生在以下几点:

  • 在 FlushMode.AUTO 时执行某些查询之前(这是默认设置)。
  • FlushMode.COMMIT 时来自 org.hibernate.Transaction.commit()
  • 从 Session.flush()

主要区别在于,当 FlushMode 设置为 COMMIT 时,commit() 会刷新会话并结束工作单元,并且您无法回滚事务,因为 flush() 只是对会话进行正常同步。

冲洗模式

更多信息

于 2012-07-02T05:26:45.380 回答
6

休眠文档

刷新是将底层持久存储与内存中保存的持久状态同步的过程。

好吧,对于一些在阅读了上面的陈述后可能会想到下一个问题(例如,flushcommit之间有什么区别)的人来说,上面的陈述是令人困惑的。

Flush就像实际执行语句但不提交它。例如:您打开任何 SQL 执行工具(如 Oracle SQL Developer 或其他),打开一个会话并触发更新语句。打开新的 SQL 会话,直到或除非您在第一个会话中进行提交,您才会看到更新。因此查询在特定的 Oracle 会话中执行但未提交。

当您调用 Hibernate 的save()orupdate()时,并不意味着底层查询会同时执行。它通常在显式commit完成或事务结束时执行。但是在某些情况下(例如获取分配给瞬态对象的 ID,以控制 Hibernate 会话的大小,例如批量更新,否则您可能会出现内存不足异常)您希望执行查询,但不提交它。冲洗在这里有帮助。

于 2017-03-14T13:39:56.153 回答