Hibernate中的Session
我们之前也经常使用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的更多相关文章
- 第四讲 :hibernate中的session
hibernate中的session中可以进行增删改差,通过工具类可以得到相关的工具类. 方法概要: Transaction beginTransaction()开始一个工作单元,得到关联的事务对象 ...
- 关于hibernate中的session与数据库连接关系以及getCurrentSession 与 openSession() 的区别
1.session与connection,是多对一关系,每个session都有一个与之对应的connection,一个connection不同时刻可以供多个session使用. 2.多个sessi ...
- (八) Hibernate中的Session以及事务
HibernateUtil.getSessionFactory().getCurrentSession() 和HibernateUtil.getSession() 的区别: 1.异:getCurren ...
- Hibernate中的Session对象 标签: hibernatesession 2017-01-22 22:10 238人阅读 评论(
Hibernate中的Session 大家在看hibernate视频的时候一定都发现了,每次要操作数据库,总是要新建一个session对象,Hibernate在对资料库进行操作之前,必须先取得Sess ...
- hibernate 中的session和事务(Transaction)
在使用hibernate开发时,遇到最多的就是session与事务,那么他们两个有什么关系呢?下面我来抛砖引玉: 1.session是hibernate中的以及缓存机制,是用来对数据进行增删改查的一个 ...
- Hibernate中的Session缓存问题
1. Session 缓存: 1) . 在 Session 接口的实现中包括一系列的 Java 集合 , 这些 Java 集合构成了 Session 缓存 . 它用于存放 Sessi ...
- Hibernate中的session和load延迟载入矛盾问题,怎样解决?
假设延迟载入出现session close的情况下 方法1.在web.xml中配置spring的openSessionInViewFilter <filter> <filter-n ...
- Hibernate中的session对象update方法的使用
使一个游离对象转变为持久化对象.例如以下代码在session1中保存了一个Customer对象,然后在session2中更新这个Customer对象: Customer customer = new ...
- hibernate中获得session的方式
his.getsession实际上是调用了父类中的方法获得session.使用spring管理hibernate的SessionFactory的时候,这个方法会从session池中拿出一session ...
随机推荐
- 2017ACM/ICPC广西邀请赛 1004 Covering
Covering Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- 从GitLab上创建分支本地拉取项目和提交项目详解
很多公司前端项目都是部署在GitLab上的,今天我要分享的就是如何从GitLab上创建新的分支并在本地拉取和提交项目 一.在GitLab上面创建自己新的分支 首先你得注册一个账号,登陆之后进入项目Pr ...
- [转帖]说一说JVM双亲委派机制与Tomcat
说一说JVM双亲委派机制与Tomcat https://www.cnblogs.com/dengchengchao/p/11844022.html 讲个故事: 以前,爱捣鼓的小明突然灵机一动,写出了下 ...
- 深入浅出JVM(一):运行时数据区域
程序计数器 线程私有 指向了正在执行的虚拟机字节码指令的地址:如果是本地方法,数值为空 没有 OutOfMemoryError 错误的区域 Java虚拟机栈 线程私有: 生命周期与线程相同: 代表着 ...
- 【LEETCODE】48、数组分类,简单级别,题目:189,217,219,268,283,414
package y2019.Algorithm.array; import java.util.Arrays; import java.util.Stack; /** * @ClassName Rot ...
- [LOJ3083] [GXOI2019] 与或和
题目链接 LOJ:https://loj.ac/problem/3083 洛谷:https://www.luogu.org/problemnew/show/P5300 Solution 逐位考虑,可以 ...
- 【.Net Core】编译时禁止自动生成netcoreapp文件夹
原文:[.Net Core]编译时禁止自动生成netcoreapp文件夹 每次在编译生成文件时,VS都会自动在<OutputPath>属性指定的路劲后再追加一个用NetCore命名的文件夹 ...
- Spring AOP创建Throwdvice实例
1.异常发生的时候,通知某个服务对象做处理 2.实现throwsAdvice接口 接口实现: public interface IHello { public void sayHello(String ...
- 2.7_Database Interface OLE-DB诞生
ODBC仅支持关系数据库,以及传统的数据库类型,并且只以C/C++语言API(API就是一些C语言的代码,是最底层的程序,在windows中就是一些.dll的文件)形式提供服务,因而无法符合日渐复杂的 ...
- java之struts2之OGNL表达式
struts2推荐使用ognl表达式 ognl: object graph navigation language 对象导航图语言 如:school.teacher.address="北京& ...