Hibernate中flush和commit之间的区别是什么?
答案 0 :(得分:6)
将JDBC连接状态与内存中保存的对象状态同步的过程称为flush。
这取决于FlushMode设置在以下几点发生:
关键区别在于,当FlushMode设置为COMMIT时,commit()会刷新会话并结束工作单元,并且您无法回滚事务,因为flush()只执行会话的正常同步。
更多info
答案 1 :(得分:3)
刷新是同步底层持久性的过程 持久存在的商店。
嗯,上面的陈述令人困惑,因为有些人在阅读上述内容后可能会得到下一个问题(例如, flush 和 commit 之间有什么区别)言。
Flush 就像实际执行语句但不提交它。例如:您打开任何SQL执行工具(如Oracle SQL Developer或其他),打开会话并激活更新语句。打开新的SQL会话,除非您在第一个会话中执行提交,否则您将看不到更新。因此查询在特定的Oracle会话中执行但未提交。
当您调用Hibernate的save()
或update()
时,并不意味着底层查询会同时执行。它通常在commit
显式或在事务结束时执行。但有一些场景(比如将一个ID分配给一个瞬态对象,控制Hibernate会话的大小,就像批量更新一样,否则你可以得到内存不足异常)你想在哪里执行查询,但不提交它。 Flush在这里有帮助。