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

时间:2012-07-02 04:50:33

标签: hibernate

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

2 个答案:

答案 0 :(得分:6)

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

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

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

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

FlushMode

更多info

答案 1 :(得分:3)

来自Hibernate docs

  

刷新是同步底层持久性的过程   持久存在的商店。

嗯,上面的陈述令人困惑,因为有些人在阅读上述内容后可能会得到下一个问题(例如, flush commit 之间有什么区别)言。

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

当您调用Hibernate的save()update()时,并不意味着底层查询会同时执行。它通常在commit 显式或在事务结束时执行。但有一些场景(比如将一个ID分配给一个瞬态对象,控制Hibernate会话的大小,就像批量更新一样,否则你可以得到内存不足异常)你想在哪里执行查询,但不提交它。 Flush在这里有帮助。