Hibernate的一级缓存是什么?具有哪些特点?

Hibernate的一级缓存是Session级别的,生命周期与Session一致,减少数据库访问。二级缓存需手动配置,可在多个Session间共享数据。一级缓存由Session的save、update等方法自动管理,而二级缓存在默认情况下不开启。
摘要由CSDN通过智能技术生成

Hibernate中的缓存分为一级缓存和二级缓存,这两个级别的缓存都位于持久化层,并且存储的都是数据库数据的备份。图1-6为Hibernate提供的两种缓存,两者区别如下:

  1.一级缓存:一级缓存本质上是自带的不可卸载的,一级缓存的生命周期与session是一致的,一级缓存称为session级别的缓存。

  2.二级缓存:默认没有开启,是需要手动配置才可以使用的。二级缓存的优势在于可以在多个session中共享数据,二级缓存称为是sessionFactory级别的缓存。

  图1-6 Hibernate提供的两种缓存

  一级缓存其实就是Session缓存。Session缓存是一块内存空间,用于存储与管理Java对象。在使用Hibernate查询对象时,首先会使用对象的OID值在Hibernate的一级缓存中查找,如果找到匹配的对象,则直接将该对象从一级缓存中取出使用;如果没有找到匹配的对象,则会去数据库中查询对应的数据。当从数据库中查询到所需数据时,该数据信息会存储到一级缓存中。由此可知,Hibernate一级缓存的作用就是减少对数据库的访问次数。

  Hibernate的一级缓存具有如下特点。

  ·当应用程序调用Session接口的save()、update()、saveOrUpdate时,如果Session缓存中没有相应的对象,则Hibernate就会自动把从数据库中查询到的相应对象信息加入到一级缓存中。

  ·当调用Session接口的load()、get()方法,以及Query接口的list()、iterator()方法时,会判断缓存中是否存在该对象,有则返回,不会查询数据库,如果缓存中没有要查询的对象,则再去数据库中查询对应对象,并添加到一级缓存中。

  ·当调用Session的close()方法时,Session缓存会被清空。

  ·Session能够在某些情况下,按照缓存中对象的变化,执行相关的SQL语句同步更新数据库,这一过程被称为刷出缓存(flush)。

  在默认情况下,Sesssion在如下几种情况中会刷出缓存。

  (1)当应用程序调用Transaction的commit()方法时,该方法先刷出缓存(调用session.flush()方法),然后再向数据库提交事务(调用commit()方法)。

  (2)当应用程序执行一次查询操作的时候,如果缓存中持久化对象的属性已经发生了变化,会先刷出缓存,以保证查询结果能够反映持久化对象的最新状态。

  (3)调用Session的flush()方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值