我们之前也经常使用Session,通过连接服务器将需要保存的值存到服务器的session中,这是之前关于session的简单应用。现在看到Hibernate框架中也有关于Session的定义,该定义是和之前的有所不同的,我们先来看看什么是Hibernate中的Session!

Session是Hibernate运作的中心,对象的生命周期、事务的管理、数据库的存取都与Session相关,Hibernate在对数据库进行操作之前,必须先取得Session实例。这其实跟我们在使用JDBC对数据库进行操作之前,必须先获取Connection实例是一样的。

Session接口是Hibernate向应用程序提供的操作数据库的最主要的接口,它提供基本的保存、添加、删除和更新java对象的方法,Session具有一个缓存,位于缓存中的对象成为持久化对象,它和数据库中的相关表相对应。Hibernate中的Session作为Hibernate的一级缓存,session的缓存是一块内存空间,在这个内存空间存放了相互关联的Java对象。Session的缓存是内置的,不可被拆卸。

Session作为Hibernate的一级缓存,提供了相应的方法,当我们在程序中需要持久化这些Java对象时,可以直接通过Session,来操作这些Java对象,当程序中需要调用Session的save()、update()、saveOrUpdate()、load()或者get()以及查询的query()方法的时候,如果在缓存中还不存在这些对象,我们就将这些Java对象添加的一级缓存中,当清理缓存时,Hibernate会根据缓存状态变化来同步更新数据库。下面来看一下Hibernate使用一级缓存的图解:

上图是描述程序查询session缓存是否存在,当不存在查询数据库,之后放入session缓存中,当应用程序第二次调用时可以直接调用session缓存中数据,可以减少访问数据的频率。

有放入Session缓存总数据的方法,就有清理的工具,Session为应用功能程序提供了两个管理缓存的方法:

(1)、evict(Object o):从缓存中清除参数指定的持久化对象

(2)、clear():清除缓存中所有的持久化对象

Hibernate中的Session的更多相关文章

  1. 第四讲 :hibernate中的session

    hibernate中的session中可以进行增删改差,通过工具类可以得到相关的工具类. 方法概要:  Transaction beginTransaction()开始一个工作单元,得到关联的事务对象 ...

  2. 关于hibernate中的session与数据库连接关系以及getCurrentSession 与 openSession() 的区别

    1.session与connection,是多对一关系,每个session都有一个与之对应的connection,一个connection不同时刻可以供多个session使用.   2.多个sessi ...

  3. (八) Hibernate中的Session以及事务

    HibernateUtil.getSessionFactory().getCurrentSession() 和HibernateUtil.getSession() 的区别: 1.异:getCurren ...

  4. Hibernate中的Session对象 标签: hibernatesession 2017-01-22 22:10 238人阅读 评论(

    Hibernate中的Session 大家在看hibernate视频的时候一定都发现了,每次要操作数据库,总是要新建一个session对象,Hibernate在对资料库进行操作之前,必须先取得Sess ...

  5. hibernate 中的session和事务(Transaction)

    在使用hibernate开发时,遇到最多的就是session与事务,那么他们两个有什么关系呢?下面我来抛砖引玉: 1.session是hibernate中的以及缓存机制,是用来对数据进行增删改查的一个 ...

  6. Hibernate中的Session缓存问题

    1. Session 缓存: 1) . 在 Session 接口的实现中包括一系列的 Java 集合 , 这些 Java 集合构成了 Session 缓存 .          它用于存放 Sessi ...

  7. Hibernate中的session和load延迟载入矛盾问题,怎样解决?

    假设延迟载入出现session close的情况下 方法1.在web.xml中配置spring的openSessionInViewFilter <filter>  <filter-n ...

  8. Hibernate中的session对象update方法的使用

    使一个游离对象转变为持久化对象.例如以下代码在session1中保存了一个Customer对象,然后在session2中更新这个Customer对象: Customer customer = new ...

  9. hibernate中获得session的方式

    his.getsession实际上是调用了父类中的方法获得session.使用spring管理hibernate的SessionFactory的时候,这个方法会从session池中拿出一session ...

随机推荐

  1. 【神经网络与深度学习】【CUDA开发】服务器(多GPU)caffe安装和编译

    一. 前提 多GPU交互在神经网络是常见的,所以在安装caffe之前需要安装NCCL,来保证多GPU之间的相互交流.  多GPU,这里指的是2个及2个以上英伟达显卡,而不是笔记本中的集显和独显. 二. ...

  2. openstack-keystone外组件命令行

    摘自openstack文档 镜像(glance) 列出您可以访问的镜像 $ openstack image list 删除指定的镜像 $ openstack image delete IMAGE 描述 ...

  3. Qt信号-槽原理剖析--(2)自己实现信号槽

    时间乃是最大的革新家--培根 先了解一下相关宏: qt为c++增加的相关宏:signals, slots,emit 在qt的预编译过程中,这些宏会被替换. 1)#define signals publ ...

  4. c++中的不是数的数nan

    matlab中经常碰到nan,inf等特殊“数”,而在C++中也有相应的表示:例如std::numeric_limits <float>::quiet_NaN ();可以得到浮点型的nan ...

  5. eoj monthly 2019.11

    原题 T1 纸条 题目大意: 给出一个长度为n的字符串,其中m位未知,对于每一位未知的字母,有k个备选字母,最终答案为备选字母按字典序排序后的第x个. 题解: 签到题-- 按照题目意思直接写就可以了. ...

  6. REST framework之URL控制

    REST framework之URL控制 一 自定义路由 1.1 原始方式 from django.conf.urls import url from app01 import views urlpa ...

  7. zap+日志分级分文件+按时间切割日志整合demo

    实现功能     info debug 级别的日志输出到 /path/log/demo.log     warn error .... 级别的日志输出到 /path/log/demo_error.lo ...

  8. 关于PATCH与PUT的区别

    两者的区别:PATCH:更新部分资源,非幂等,非安全PUT:更新整个资源,具有幂等性,非安全注:幂等性:多次请求的结果和请求一次的结果一样安全性:请求不改变资源状态 举个两者明显区别的例子(我对两者定 ...

  9. PyTorch工具

    以装饰器添加所有代码对应的tensor的信息 https://github.com/zasdfgbnm/TorchSnooper

  10. (三) Docker 常用操作与CentOS7 防火墙命令

    参考并感谢 Docker 常用命令 https://docs.docker.com/engine/reference/commandline/docker/ Docker 登录docker账户 doc ...