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. Ubuntu在终端执行命令时出现的错误

    1.在安装jdk时无意间结束了安装进程,然后就提示这个错误 E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)E: 无法锁定管理目录(/var/lib/d ...

  2. Telephone Lines [POJ3662] [二分答案]

    Description Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用. FJ的农场周围分布着N(1 <= N ...

  3. 05-BootStrap

    今日任务 使用JQuery发送请求局部刷新页面 使用BootStrap制作一个响应式的页面 使用BootStrap制作网站的首页 教学目标 掌握什么是响应式及响应式的原理 掌握BootStrap的栅格 ...

  4. MySQL中count函数使用方法详解

      count函数是用来统计表中或数组中记录的一个函数,下面我来介绍在MySQL中count函数用法与性能比较吧. count(*) 它返回检索行的数目, 不论其是否包含 NULL值. SELECT ...

  5. jquery第二篇

    1  操作元素(属性,css,文档处理) --------------------------属性 $("").attr(); $("").removeAttr ...

  6. [LeetCode] Generate Random Point in a Circle 生成圆中的随机点

    Given the radius and x-y positions of the center of a circle, write a function randPoint which gener ...

  7. node 学习(二)

    写基础太麻烦了  我花了个基础知识的脑图

  8. nginx r日志中午出现\xE5\x88\x98\xE4\xB8\x96\xE5\xA5\x87

    参考文档: https://www.cnblogs.com/hark0623/p/5715726.html https://www.cnblogs.com/fqfanqi/p/7900758.html ...

  9. Design Principle, Design Patterns And Refactoring

    https://refactoring.guru/smells/feature-envy https://stackoverflow.com/questions/1242994/effective-c ...

  10. yii2 gridview checkbox

    给checkbox(在GridView里的)添加一个value 控制器:$dataProvidermStu->key = "student_no"; view:[ 'clas ...