hibernate中实体类对象的状态

在hibernate中实体类对象有三种状态

(1)瞬时态(临时态)      

    瞬时态:即我们自己创建一个对象,还没有保存到数据库就叫临时态,其实也可以说是对像没有id值,跟session没有关系(或者是一级缓存中不存在),即是临时态。

(2)持久态

    持久态:即,此对象是我们从数据库中获取到的,即是持久太,简单的说就是,对象有id值,跟session有关系(或者说是一级缓存中存在),即是持久态。

(3)托管态(游离态)

    托管态:即,此对象有id值,但是跟session 没有关系(或者说是一级缓存中不存在),即是托管态。

瞬时态———通过保存方法———持久态———通过get()方法———游离态。

其中实体类对象的状态会影响到方法的执行:

                      就比如saveOrUpdate()方法执行的时候:

                                          (1)对象是瞬时态的话,会执行insert语句。

                                          (2)对像是托管态的时候就会做修改操作(update)

                                          (3)持久态的时候也能做修改操作,但是这里就涉及到持久态对象会在事物的提交的时候自动跟新到数据库。

问候一下hibernate一级缓存他老人家

数据一般是存在数据库里面,而数据库本身是一个文件系统,而文件系统的读取就需要用到文件流了,而读取数据的时候使用文件流的方式操作,效率不是很高的,而考虑到这种情况,我们就可以想想

是不是可以把数据放到系统的内存中去从而提高数据的读取效率,而把数据放到系统的内存中去就是我们所说的缓存数据,即缓存。

那什么是hibernate缓存呢?

那就是hibernate提供了一种优化的方式,可以把数据直接放到内存中,这就是hibernate缓存,其实hibernate一级缓存是hibernate框架中的一种优化的机制。(优化机制我自己的理解就是一种提高程序或者框架性能或者效率的一种“方法”)。

hibernate一级缓存默认是打开的。

hibernate一级缓存有它的使用范围那就是session范围(从session创建到session关闭(事物提交或者手动关闭session)。

一级缓存的道路怎么走

在查询数据库的数据时候,hibernate首先去查的不是数据库,而是一级缓存区域,会先去一级缓存中去查询,如果查询的结果存在那就直接返回不会再去数据库中查询数据,但是如果查询的数据一级缓存中不存在,

那就会去数据库中去查,从数据库中拿到数据之后会同时做两件事那就是把查询的数据返回还有就是把数据放到一级缓存中的缓存区以及快照区中,那我们第二次再次查询这个数据的时候就会直接从缓存中查询就不会进入数据库中进行查询了。

这样就可以减少对数据库的操作,从而达到提高程序的性能以及效率。

一级缓存中的家族产业

一级缓存分为:缓存区和快照区。

缓存区:就比如我们在调用hibernate中的调用方法查询到数据库并拿到了数据库对象的时候,hibernate会首先把查询的数据对象放到一级缓存和快照区中,但是当我们对这个对象我们查询的数据对象进行修改的时候(当然对象必须在存在于Hibernate一级缓存中且session没有关闭的情况下。)我们修改的只是修改缓存区中的内容,而不会修改快照区的内容,这是一个最重要的机制,我感觉这钟机制真的很牛bi,hibernate只是修改缓存中的数据,而不修改快照区中的内容,但是在提交事物的时候hibernate框架会自动的去拿缓存区和快照区的内容进行对比,如果快照区与缓存区的内容是一致的,那就不会去更新到数据库,但是如果是不一样的那就会自动的更新到数据库。这种机制又是提高Hibernate框架的执行效率。

快照区:快照区,什么是快照区,快照区为什么叫快照区,其实可以这么理解快照区,快照区就是存放照片的,只不过是这个照片有点独特,那就是这个照片是从数据库中拿到的数据的照片。快照区所做的事就是在数据放入缓存区的同时对数据进行“拍照”对其进行记录。以便在以后缓存区中的数据修改的时候进行对比看数据是否发生了变化,如果变化那就更新到数据库,其实到这里也就容易理解为什么我们在修改对象的时候缓存区中的数据会发生相应的改变而快照区不会发生改变了。是因为快照区中存的是“照片”嘛。照片的内容我们是改变不了的,不是吗?

hibernate一级缓存及对象的状态的更多相关文章

  1. Hibernate一级缓存和三种状态

    Hibernate一级缓存又称session缓存,生命周期很短,跟session生命周期相同. 三种状态:1.transient(瞬时态):刚new出来的对象,既不在数据库中,也不在session管理 ...

  2. hibernate - 一级缓存和三种状态解析

    转载自:http://www.cnblogs.com/whgk/p/6103038.html 一.一级缓存和快照 什么是一级缓存呢? 很简单,每次hibernate跟数据库打交道时,都是通过sessi ...

  3. hibernate(二)一级缓存和三种状态解析

    序言 前一篇文章知道了什么是hibernate,并且创建了第一个hibernate工程,今天就来先谈谈hibernate的一级缓存和它的三种状态,先要对着两个有一个深刻的了解,才能对后面我要讲解的一对 ...

  4. Hibernate学习(二)———— 一级缓存和三种状态解析

    一.一级缓存和快照 什么是一级缓存呢? 很简单,每次hibernate跟数据库打交道时,都是通过session来对要操作的对象取得关联,然后在进行操作,那么具体的过程是什么样的呢? 1.首先sessi ...

  5. Hibernate一级缓存(补)

    ------------------siwuxie095                                 什么是缓存         缓存是介于应用程序和永久性数据存储源(如:硬盘上的 ...

  6. hibernate一级缓存

    理解 Hibernate 一级缓存 Hibernate 一级缓存默认是打开,不需要任何的配置.实际上,你无法强制禁止它的使用. 如果你理解了一级缓存实际上和会话是关联的,就很容易理解一级缓存.总所周知 ...

  7. [原创]java WEB学习笔记78:Hibernate学习之路---session概述,session缓存(hibernate 一级缓存),数据库的隔离级别,在 MySql 中设置隔离级别,在 Hibernate 中设置隔离级别

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. Hibernate一级缓存(基于查询分析)

    首先我们应该弄清什么是hibernate缓存:hibernate缓存是指为了降低应用程序对物理数据源的访问频次,从而提高应用程序的运行性能的一种策略.我们要将这个跟计算机内存或者cpu的缓存区分开. ...

  9. hibernate一级缓存和快照

    摘自网络: Hibernate中的一级缓存的底层是以Map形式存在的,key是主键,value是对象,所以它的泛型为Map<Serializable,Object>,key的泛型为串行化是 ...

随机推荐

  1. 如何用div绘制一个容器,例如圆形

    需求:一个圆形的容器,里面有两种颜色,随比率不同而变化. 实现同一个容器中两种颜色变化的关键是css渐变 //background:linear-gradient(#818181 30%,#06FF3 ...

  2. Python学习——python的常用模块

    模块:用一堆代码实现了某个功能的代码集合,模块是不带 .py 扩展的另外一个 Python 文件的文件名. 一.time & datetime模块 import time import dat ...

  3. Redis自学笔记:5.实践

    第5章实践 5.3 python与redis 5.3.1安装 pip install redis 5.3.2使用方法 自己补充内容:Ubuntu下redis开启远程连接 打开redis配置:sudo ...

  4. NOIP2011 D2T3 观光公交 做题笔记

    目录 归纳题目的性质 算法 60分 100分 code 大家来找茬 总结 归纳题目的性质 每一个加速器效果相同(1) 车子等到所有人上车之后才会发车, 这个最早发车时间不由加速器的配比决定(2) 要优 ...

  5. SDOI2019 省选前模板整理

    目录 计算几何✔ DP 斜率优化✔ 四边形不等式✔ 轮廓线DP✘ 各种分治 CDQ分治✔ 点分治✔ 整体二分✔ 数据结构 线段树合并✔ 分块✔ K-D Tree LCT 可持久化Trie✔ Splay ...

  6. haskell实现简易计算器

    > module Main where > import System.IO > import Data.Char > import Control.Monad > im ...

  7. [LeetCode] Design Circular Queue 设计环形队列

    Design your implementation of the circular queue. The circular queue is a linear data structure in w ...

  8. centos中安装配置nginx完成之后主机无法访问

    原因 VMware中安装centos7,安装配置完成nginx后,主机无法访问.虚拟机没有放行Nginx默认端口80. 解决办法 首先:开启 web 端口 firewall-cmd --permane ...

  9. html保留空格

    echo '<div style="white-space:pre-wrap">○ '.$noticeInfo[$i]['content'].'</div> ...

  10. Java中“==”和“equals()”的区别

    “==”比较的是变量所指向的对象,当S1在内存中定义以后,再定义s2的时候s2所指向的值是定义s1时候所创建的,而不是又在内存创建了一个“Monday”. “equals”比较的是对象所指向的值,所以 ...