hibernate中flush()、refresh()、clear()缓存操作

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 flush():使数据库中的对象和session缓存中的对象的状态保持一致。为了保持一致,则可能发送对应的sql语句(若缓存中的对象和数据库中的对象一样则不发送sql语句)。

1、在transaction的commit()方法中:先调用session的flush方法,再提交事务。

2、flush方法可能会发送sql语句,但不会提交事务。

3、注意:在未提交事务或显示的调用session.flush()方法之前,也有可能会进行flush()操作。

1)在执行HQL或QBC查询,会先进行flush()操作以得到数据表的最新的记录。

2)若记录的id是由底层数据库使用自增的方式生成的,则在save()方法后,就会立即发送insert语句,因为save()方法后必须保证对象的id是存在的。

commit()和flush的区别:flush执行一系列sql语句但不提交事务;commit()先调用flush()方法再提交事务,提交事务意味着对数据库操作永久保存下来。

refresh():会强制发送select语句,以使session缓存中对象的状态和数据表中对应的记录保持一致。该方法的有效性需要配置事务的隔离级别为read commited(读已提交),在hibernate.cfg.xml文件中配置<property name="connection.isolation">2</property>

clear():清理缓存。

参考:https://blog.csdn.net/qq_27739989/article/details/51407351。图片:https://blog.csdn.net/chuck_kui/article/details/51531089
原文地址:https://www.cnblogs.com/day1day1up/p/11155592.html