hibernate mysql 缓存_Hibernate三种状态,缓存,以及update更新问题

本文详细介绍了Hibernate中对象的三种状态:瞬时、持久和游离状态,以及它们之间的转换。此外,讨论了Hibernate执行update操作时对数据库的访问次数。还深入解析了一级缓存和二级缓存的概念,比较了两者的特性,并提供了二级缓存的管理策略和常用缓存插件。最后,给出了配置和使用Hibernate二级缓存的步骤,以及如何通过Statistics监控缓存命中率。
摘要由CSDN通过智能技术生成

一. Hibernate中对象的三种状态

1. 瞬时状态(transient)

当我们通过Java的new关键字来生成一个实体对象时,这时这个实体对象就处于自由状态,此时该对象只是通过JVM获得了一块内存空间,还并没有通过Session对象的save()方法保存进数据库,因此也就还没有纳入Hibernate的缓存管理中,也就是说该对象现在还自由的游荡于Hibernate缓存管理之外。所以我们可以看出自由对象最大的特点就是,在数据库中不存在一条与它对应的记录。

瞬时状态特点:

I: 不和 Session 实例关联;

II: 在数据库中没有和瞬时对象关联的记录

2. 持久状态(persistent)

持久化对象就是已经被保存进数据库的实体对象,并且这个实体对象现在还处于Hibernate的缓存管理之中。这是对该实体对象的任何修改,都会在清理缓存时同步到数据库中。

持久状态特点:

I: Session 实例关联

II: 在数据库中有和持久对象关联的记录

3. 游离状态(detached)

当一个持久化对象,脱离开Hibernate的缓存管理后,它就处于游离状态,游离对象和自由对象的最大区别在于,游离对象在数据库中可能还存在一条与它对应的记录,只是现在这个游离对象脱离了Hibernate的缓存管理,而自由对象不会在数据库中出现与它对应的数据记录。

脱管对象特点:

I: 本质上和瞬时对象相同

II: 只是比爱瞬时对象多了一个数据库记录标识值 id.

三种状态相互转化的状态图如下:

498d3500ad2290cea685efe041dc21dc.png

二. Hibernate执行update操作会访问数据库几次

首先你要知道Hibernate执行update的运行机理,Hibernate的update是怎么样自动进行update操作的呢?

(1). hibernate会执行一个select操作,到数据库中查找,当前要update操作的对象的主键是否存在,类似于:

select id from table where id=xxx;

(2).执行更新操作

I: 如果查到了该ID,就说明该对象是一个持久化对象,如果该对象的某些属性变化了,Hibernate就会自动的执行update操作,同步数据库中的该对象。

II: 如果Hibernate没有查找到该ID,就说明该对象是一个游离的对象,Hibernate就会自行insert操作。

根据这些,就可以明白要update的对象的ID在数据库中不存在,或者更改该对象的ID,这些都是执行insert而不是update。

三. Hibernate中一级缓存和二级缓存

1. 一级缓存二级缓存的概念解析

(1)一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,如果短时间内这个

session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值