什么是Hibernate中flush和commit之间的区别?

gnr*_*ddy 14 hibernate

什么是Hibernate中flush和commit之间的区别?

Rav*_*avi 6

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

这取决于FlushMode设置在以下几点发生:

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

关键区别在于,当FlushMode设置为COMMIT时,commit()会刷新会话并结束工作单元,并且您无法回滚事务,因为flush()仅执行会话的正常同步.

FlushMode

更多信息


M S*_*ach 6

来自Hibernate 文档

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

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

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

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