3.0 Session缓存

Configuration这个对象相当于代表了一个Hibernate的配置文件;
ServiceRegistry相当于Hibernate4的一个新的接口,所有的基于Hibernate的配置或者服务都必须向这个接口进行注册才可以使用;
SessionFactory相当于一个和单个数据库建立连接的映射的镜像,用来创建Session对象;
Transaction是HIbernate进行数据库操作之前必须要开启的事务对象,若不开启则操作数据库的内容是失败的

本节内容:Session这个对象及其具有的缓存的功能



 1.Session概述
  ① Session接口数Hibernate提供的操作数据库的最主要的接口,这个接口中有一系列更新,删除,保存和加载(根据唯一的UID将数据记录转换为对象到内存中)的方法。
  ② Seesion的对象具有一个一级的缓存,位于一级缓存中的对象称之为持久化的对象(这些对象和数据库中的一些记录一一对应)。Session可以在某些时间点按照缓存中对象的变化来执行相关的SQL语句,来同步更新数据库,这一个过程称之为刷新缓存(fluseh()方法)
  ③站在持久化的角度,Hibernate把对象分为4种状态:持久化状态,临时状态,游离状态,删除状态。Session的特定方法能使对象从一个状态转换到另外一个状态。

2.Session缓存
  ① Session接口的实现类中包含一系列的Java的集合,这些Java的集合构成了Session缓存,只要Session的实例还没有结束生命周期,且没有清理缓存,那么这个Session对象中的缓存中的对象也不会结束生命周期,哪怕没有任何变量引用这些位于缓存中的持久化的对象。
  ② Session缓存的功能
  Session缓存可以有效的减少HIbernate应用程序访问数据库的频率。因为它可以从缓存中拿取数据,而不必再从数据库中拿取数据。
  ③ Session实例对象的方法


3.flush缓存
flush:Session按照缓存中对象的属性变化来同步更新数据库
默认情况下Session在以下时间点刷新缓存:
  • 显示调用Session的flush()方法
  • 当应用程序调用Transaction()的commit()方法的时候,该方法先flush,然后再向数据库提交事务。
  • 当应用程序执行一些查询(HQL,Criteria)操作时,如果缓存中持久化对象的属性已经发生了变化,会先flush缓存,以保证查询结构能够反映持久化对象的最新状态
flush缓存的例外情况:如果对象使用native生成器生成OID,那么当调用 Session的save()方法保存对象时,会立即执行向数据库插入该实体的insert语句。

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


4.refresh();这个方法会强制性的发出查询(select)语句使得Session缓存中的对象和数据库中的记录保持一致。

需要注意的是,使用这个方法前必须查看数据库针对事务的隔离级别是什么,我们必选将数据库的隔离级别设置成读已提交的即2--read_commited才可以使refresh()方法生效。MySql默认数据库隔离级别是repeatable_read(可重复读),Oracle数据库的默认隔离级别是read_commited。详情见3.1

设置:



5.clear():顾名思义,就是清除Session实例中的缓存对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值