Hibernate一级缓存

  Hibernate的一级缓存就是指Session缓存,Session缓存是一块内存空间,用来存放相互管理的java对象,在使用Hibernate查询对象的时候,首先会使用对象属性的OID值在Hibernate的一级缓存中进行查找,如果找到匹配OID值的对象,就直接将该对象从一级缓存中取出来使用,不会再查询数据库;如果没有找到相同OID值的对象,则会去数据库中查找相应的数据。当从数据库中查询到所需数据时,该数据信息也会放置到一级缓存中,Hibernate的一级缓存的作用就是减少对数据库的访问次数。

  在Session接口的实现中包含一系列的Java集合,这些Java集合构成了Session缓存,只要Session实例没有结束生命周期,存放在它缓存中的对象也不会结束生命周期。固一级缓存也被称为是Session基本的缓存。

    Hibernate的一级缓存有如下特点:

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

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

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

 一级缓存的内部结构(快照区)

    Hibernate向一级缓存放入数据时,同时复制一份数据放入到Hibernate快照中,当使用commit()方法提交事务时,同时会清理Session的一级缓存,这时会使用OID判断一级缓存中的对象和快照中的对象是否一致,如果两个对象中的属性发生变化,则执行update语句,将缓存的内容同步到数据库,并更新快照;如果一致,则不执行update语句。Hibernate快照的作用就是确保一级缓存中的数据和数据库中的数据一致。

  

最新文章

  1. Atitit.异步编程技术原理与实践attilax总结
  2. 第四课 开发uehtml官网响应式静态页面
  3. python学习笔记--基础概要
  4. c 开源代码
  5. 了解linux内存管理机制(转)
  6. 二分+DP HDU 3433 A Task Process
  7. Download the WDK, WinDbg, and associated tools
  8. [转]Android 应用的自动升级、更新模块的实现
  9. docker 挂在本地目录
  10. linux 命令及进程控制
  11. android媒体--stagefright概述【一】
  12. Openstack 的 RPC使用。
  13. #if defined和#if !defined(c语言的宏定义)
  14. C++ 中Hello World的一种写法
  15. mingw-gcc-9.0.1-i686-posix-sjlj-201903
  16. 父级POM的表现形式
  17. python3+selenium入门10-表单切换
  18. c++之__attribute__((unused))
  19. Java 雇员管理小练习(理解面向对象编程)
  20. centos网络yum源的安装

热门文章

  1. C++用法及学习心得
  2. [Swift]枚举类型:UIBarButtonItem的24种样式
  3. Core 接口发布报错
  4. ubuntu 16.04 安装caffe2的方法及问题解决
  5. Java虚拟机知识汇总
  6. The EntityFramework package is not installed on project
  7. jquery click嵌套 事件重复注册 多次执行的问题解决
  8. sql server 性能调优之 资源等待 CXPACKET
  9. mysql 开发基础系列5 字符串函数
  10. 基于Electron+.NET Core的前后端分离的跨平台桌面应用