Hiberate_Session

操作Session缓存

                         flush()

Session 缓存   -------------------------->  数据库

                       <--------------------------

                          refresh()

一、flush:使数据表中的记录和session缓存中的对象的状态保持一致,为了保持一致,则可能会发送对应的sqlyuju 

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

2、flush()方法可能会发送SQL语句,但不会提交事务

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

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

2)若记录的ID是由底层数据库使用自增的方式生成的,则在调用save方法时,就会立即发送INSERT语句

因为save方法后,必须保证对象的ID是存在的

 

 

二、refresh():会强制发送select语句,

以使session缓存中对象的状态和数据表中对应的记录保持一致!

三、clear():清理缓存

News news1 = (News)session.get(News.class, 1);

News news2 = (News)session.get(News.class, 1);

SQL语句只执行一条,是因为缓存中有这个news对象

当我在这个两行代码中加上session.clear()

News news1 = (News)session.get(News.class, 1);

session.clear();

News news2 = (News)session.get(News.class, 1);

执行后会执行2条SQL语句,因为session.clear()会清理session的对象,后面再需要这个对象

会重新发送select语句来获取对象

 

posted @ 2022-03-21 13:12  小菜一碟new  阅读(28)  评论(0)    收藏  举报