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语句来获取对象

浙公网安备 33010602011771号