上一篇说到,Hibernate框架中,对象转化为持久化状态后,会在事务提交时,自动将对象属性存储到数据库,而在事务提交之前,我们是对哪里的对象进行操作呢,这就是一级缓存(Session缓存)的作用。

  • 我们在将对象转化为持久化状态时,就是将这个对象保存到了一级缓存中,在这之后和事务提交之前,我们对对象进行的所有操作都会同步到session缓存中,在事务提交时,Hibernate会将这个对象的信息根据配置文件对应关系(属性名对应列名)保存到数据库中。

快照:快照可以说是与缓存对应的关系

通过前面学习知道:当通过new创建一个对象c,并将其与session关联后,c就保存到了缓存中,此时在事务提交时将其保存到数据库中,但是在另一种情况下:

如:

Customer c1=session.get(Customer.class, 1l);// 假设c1原本的name为  胡胡
c1.setCust_name("胡一");
c1.setCust_name("胡二");
c1.setCust_name("胡胡");

tst.commit();  // 事务提交

以上这种情况,通过测试可以知道,获得c1后,事务提交时,框架并没有帮我们执行任何数据库操作,这就是快照的作用。

  • 当通过直接get的方式获得对象时,此时对象直接就是持久化状态,Hibernate会将对象的原始数据拷贝两份存储,一份放在session缓存中,另一份放在快照中,当用户操作完毕后,操作的是缓存中的数据,Hibernate将操作后缓存中的数据与快照中的原始数据进行比较,如果比较发现两份数据不相同,则将缓存中的数据存储到数据库中,如果发现相同,Hibernate则不会进行任何数据库操作。这就是快照的作用。

当新new出来的对象与session关联时,快照中是不存储这个对象的任何信息的,所以当事务提交时,缓存与快照比较当然会不同,所以讲新数据存储到数据库。

Hibernate学习—— 一级缓存快照相关推荐

  1. Hibernate的一级缓存

    Hibernate的一级缓存 什么是缓存:缓存将数据库/硬盘上文件中数据,放入到缓存中(就是内存中一块空间).当再次使用的使用,可以直接从内存中获取 缓存的好处:提升程序运行的效率.缓存技术是Hibe ...

  2. hibernate教程--一级缓存详解

    1.1 Hibernate的一级缓存 1.1.1 Hibernate的一级缓存: 什么是缓存: 缓存将数据库/硬盘上文件中数据,放入到缓存中(就是内存中一块空间).当再次使用的使用,可以直接从内存中获 ...

  3. hibernate教程--一级缓存

    1.1Hibernate的一级缓存 1.1.1Hibernate的一级缓存: 什么是缓存: 缓存将数据库/硬盘上文件中数据,放入到缓存中(就是内存中一块空间).当再次使用的使用,可以直接从内存中获取. ...

  4. (转)Hibernate的一级缓存

    http://blog.csdn.net/yerenyuan_pku/article/details/70148567 Hibernate的一级缓存 Hibernate的一级缓存就是指Session缓 ...

  5. java中一级缓存_JavaWeb_(Hibernate框架)Hibernate中一级缓存

    Hibernate中一级缓存 Hibernate 中的缓存分为一级缓存和二级缓存,这两个级别的缓存都位于持久化层,并且存储的都是数据库数据的备份.其中一级缓存是 Hibernate 的内置缓存,在前面 ...

  6. Hibernate之一级缓存和二级缓存

    1:Hibernate的一级缓存: 1.1:使用一级缓存的目的是为了减少对数据库的访问次数,从而提升hibernate的执行效率:(当执行一次查询操作的时候,执行第二次查询操作,先检查缓存中是否有数据 ...

  7. hibernate之 一级缓存和二级缓存

    2019独角兽企业重金招聘Python工程师标准>>> 缓存 缓存的实现不仅需要作为物理介质的硬件,同时需要管理缓存的并发访问策略和过期策略的程序(软件).所以缓存通常是通过软件和硬 ...

  8. hibernate中的一级缓存

    hibernate中的一级缓存 Hibernate提供了两种缓存,这里主要写一级缓存. 第一级缓存是session的缓存,由于Session对象的生命周期通常对应一个数据事务或者一个应用事务,因此它的 ...

  9. Hibernate第七篇【对象状态、一级缓存】

    前言 本博文主要讲解Hibernate的细节-->对象的状态和一级缓存- 对象状态 Hibernate中对象的状态: - 临时/瞬时状态 - 持久化状态 - 游离状态 学习Hibernate的对 ...

最新文章

  1. 转 常见hash算法的原理
  2. LaTeX如何让两张图并排显示
  3. atcode062D(预处理&优先队列)
  4. 无线网卡共享Internet访问到电脑有线接口注意事项
  5. esxi 修改服务器配置失败,R720服务器安装 ESXI 5.5update1后出现XXX错误
  6. 【AI视野·今日CV 计算机视觉论文速览 第232期】Thu, 8 Jul 2021
  7. MFC中使用自定义消息 .
  8. JavaScript刷新页面,不重复提交
  9. hadoop2.6.2分布式环境搭建
  10. Mozilla推荐的CSS属性书写顺序及命名规则
  11. 机器学习强化(数据清洗、实战理解)
  12. 1.74HC138控制LED发光
  13. 专业词汇及解释(持续更新,自用)
  14. 一文盘点目前免费的云服务器
  15. hdu 5510 strstr/find/KMP
  16. android m是什么版本号,Android M版本号确定,并不是Android 6.0
  17. 微信群骂人违法吗?怎么维权
  18. BlockingQueue队列有哪些
  19. AES256-GCM-NOPADDING加密解密(java)
  20. Redis主从复制(Replication)和哨兵模式(Sentinel)

热门文章

  1. MacOS好用的系统清理工具CleanMyMac有哪些特点功能?
  2. 企业区块链在2018年已经就绪
  3. Linux 文件/文件夹无法删除问题解决方案
  4. SpringBoot学习-part69安全-权限控制注销
  5. openwrt下wifi设置详细过程
  6. golang性能调优工具pprof的使用
  7. WPF如何用TreeView制作好友列表、播放列表
  8. 自编写RPC通信实例解析HadoopRPC通信原理
  9. 二、T100多角贸易实战
  10. 如何在Linux(Ubuntu 14.04 LTS)上安装搜狗拼音输入法