Hibernate commit与flush
/** * * https://blog.csdn.net/zmx729618/article/details/51455051 * * flush() 执行一系列的sql,但不会提交事务 * comit() 先调用flush()方法,然后提交事务. 提交事务意味着对数据库所做的更新会永久保持下来 . * * flush() 清理缓存,将Hibernate的缓存提交到数据库,如果数据库处在一个事务中,这些sql将会被储存起来。 * commit() 数据会永久的保存下来,真正的被持久化。 * * flush() 针对缓存,commit() 针对事务,数据同步到数据库只要没有commit,还是可以rollback的 * * * 当commit提交之后,才会执行相应的insert代码,而commit又是隐性的调用flush的,那在commit之前调用flush的作用的什么? * 我的理解是防止多条SQL语句冲突,这是因为flush到数据库中执行SQL语句的顺序不是按照你代码的先后顺序,而是按照insert,update....delete的顺序执行的,如果你不按照这个顺序在代码中编写, * 如果逻辑一旦出错就会抛exception了,解决这个的办法之一就是在可能其冲突的SQL操作后面flush一下,防止后面的语句其冲突 */