hibernate中的session.flush和commit的区别
1个回答
展开全部
1、flush()方法进行清理缓存的操作,执行一系列的SQL语句,但不会提交事务;commit()方法会先调用flush()方法,然后提交事务. 提交事务意味着对数据库所做的更新会永久保持下来 所谓清理,是指Hibernate 按照持久化象的状态来同步更新数据库
2、Flush()后只是将Hibernate缓存中的数据提交到数据库,如果这时数据库处在一个事物当中,则数据库将这些SQL语句缓存起来,当Hibernate进行commit时,会告诉数据库,你可以真正提交了,这时数据才会永久保存下来,也就是被持久化了.
3、commit针对事物的,flush针对缓存的, 数据同步到数据库中后只要没有commit还是可以rollback的。
可以这么理解,hibiernate有二级缓存,而平时一般只用一级缓存(默认开启),也就是session级的缓存。处于一个事务当中,当save的时候,只是把相应的insert行为登记在了以及缓存上,而flush是把缓存清空,同时把insert行为登记在数据库的事务上。当commit提交之后,才会执行相应的insert代码,而commit又是隐性的调用flush的,那在commit之前调用flush的作用的什么?我的理解是防止多条SQL语句冲突,这是因为flush到数据库中执行SQL语句的顺序不是按照你代码的先后顺序,而是按照insert,update....delete的顺序执行的,如果你不按照这个顺序在代码中编写,如果逻辑一旦出错就会抛exception了,解决这个的办法之一就是在可能其冲突的SQL操作后面flush一下,防止后面的语句其冲突
同时flush的作用,也有提交大量数据时候清理缓存的作用
2、Flush()后只是将Hibernate缓存中的数据提交到数据库,如果这时数据库处在一个事物当中,则数据库将这些SQL语句缓存起来,当Hibernate进行commit时,会告诉数据库,你可以真正提交了,这时数据才会永久保存下来,也就是被持久化了.
3、commit针对事物的,flush针对缓存的, 数据同步到数据库中后只要没有commit还是可以rollback的。
可以这么理解,hibiernate有二级缓存,而平时一般只用一级缓存(默认开启),也就是session级的缓存。处于一个事务当中,当save的时候,只是把相应的insert行为登记在了以及缓存上,而flush是把缓存清空,同时把insert行为登记在数据库的事务上。当commit提交之后,才会执行相应的insert代码,而commit又是隐性的调用flush的,那在commit之前调用flush的作用的什么?我的理解是防止多条SQL语句冲突,这是因为flush到数据库中执行SQL语句的顺序不是按照你代码的先后顺序,而是按照insert,update....delete的顺序执行的,如果你不按照这个顺序在代码中编写,如果逻辑一旦出错就会抛exception了,解决这个的办法之一就是在可能其冲突的SQL操作后面flush一下,防止后面的语句其冲突
同时flush的作用,也有提交大量数据时候清理缓存的作用
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询