hibernate框架学习之Session管理
Session对象的生命周期
lHibernate中数据库连接最终包装成Session对象,使用Session对象可以对数据库进行操作。
lSession对象获取方式:
•加载所有配置信息得到Configuraction对象
•由Configuraction对象,创建出SessionFactory对象
•由SessionFactory对象,在连接池中获取某个数据连接对象
•将连接对象包装成Session对象返回给开发者使用
lSession对象在数据库连接池中对应的连接对象是唯一的,使用完毕后,关闭Session时,对应绑定的数据库连接对象也将被释放,交由数据库连接池进行维护,清理本次操作过程中Session对象所携带的所有数据。
l操作过程中,如果不关闭Session对象,将带来灾难性的后果,一旦数据库连接池中的连接无法正常回收,当达到数据库连接池上限时,将无法获取可用的连接对象。
lSession对象的生命周期交由开发者管理是存在风险性的,因此Hibernate提供了3种Session对象的管理模式
•Session对象生命周期由开发者管理
•Session对象生命周期与JTA事务绑定
•Session对象生命周期由本地线程管理
lJTA(Java Transaction API ),Java事务架构,允许用户进行分布式事务处理(Spring中讲解)
•事务传播属性
•事务嵌套的模拟(2PC协议)
本地线程管理Session对象
l本地线程管理Session对象即使用当前应用程序的线程绑定一个固定的Session对象,无论在何处,只要获取Session对象,获取到的均为同一对象
l本地线程管理实现机制
•在Hibernate中创建本地线程管理Map<Thread,Session>
•当出现新的线程时,如果在线程中获取Session对象将调用map的获取方法,传入当前线程对象作为key
•如果未发现对应的Session对象,从SessionFactory处获取一个全新的Session对象,然后添加到map中
•如果发现了对应的Session对象,直接使用
•线程消亡时执行对应的关闭Session的操作
l本地线程管理Session对象的生命周期
•Session对象的初始化操作发生在第一次调用Session对象时
•在线程对象未销毁前,可以使用Session提供的各种操作
•当线程对象销毁时,关闭对应的Session
l注意:如果手工关闭Session对象,会造成当前线程丢失对Session对象的控制权,关闭Session操作之后,所有获取当前线程绑定Session对象的操作将无法正常运行,抛出异常。使用本地线程管理Session不能手工执行close()操作。
本地线程管理Session对象步骤
l在hibernate.cfg.xml配置文件中,设置Session对象由本地线程维护

l在应用程序中获取当前绑定Session对象

l注意:
•本地Session绑定当前线程,如果当前线程发生意外,可能会造成对应的Session对象无法被释放,永久性占用数据库连接
•(警告)本地Session通常只应用于数据层开发,尽量不要挪至其它层,否则将出现无法控制的现象
hibernate框架学习之Session管理的更多相关文章
- hibernate框架学习笔记6:事务
MySQL的事务.JDBC事务操作: 详细见这篇文章:比较详细 http://www.cnblogs.com/xuyiqing/p/8430214.html 如何在hibernate中配置隔离级别: ...
- [ SSH框架 ] Hibernate框架学习之二
一.Hibernate持久化类的编写规范 1.什么是持久化类 Hibernate是持久层的ORM影射框架,专注于数据的持久化工作.所谓持久化,就是将内存中的数据永久存储到关系型数据库中.那么知道了什么 ...
- j2ee开发之hibernate框架学习笔记
hibernate框架技术重点学习笔记 1.针对不同的数据库,有不同的数据库实现类,使其符号对应的数据库? mysqlDaoImpl oracleDaoImpl ... ... 2.对象和表记录的转换 ...
- 为什么要用Hibernate框架? 把SessionFactory,Session,Transcational封装成包含crud的工具类并且处理了事务,那不是用不着spring了?
既然用Hibernate框架访问管理持久层,那为何又提到用Spring来管理以及整合Hibernate呢?把SessionFactory,Session,Transcational封装成包含crud的 ...
- hibernate框架学习笔记3:API详解
Configuration对象: package api; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configur ...
- [ 学习笔记 ] Hibernate框架学习之一
一.JavaEE开发三层结构和三大框架的对应关系: Struts2框架 -> 表现层 web层(MVC是表现层的设计模型) 业务层 service层 Hibernate框架 -> 持久层 ...
- [ SSH框架 ] Hibernate框架学习之三
一.表关系的分析 Hibernate框架实现了ORM的思想,将关系数据库中表的数据映射成对象,使开发人员把对数据库的操作转化为对对象的操作,Hibernate的关联关系映射主要包括多表的映射配置.数据 ...
- hibernate框架学习之核心API
ConfigurationSessionFactorySessionTransactionQueryCriteria Configuration Configuration对象用于封装Hibernat ...
- hibernate框架学习笔记1:搭建与测试
hibernate框架属于dao层,类似dbutils的作用,是一款ORM(对象关系映射)操作 使用hibernate框架好处是:操作数据库不需要写SQL语句,使用面向对象的方式完成 这里使用ecli ...
随机推荐
- golang channle阻塞
当一个channle容量写满时,会出现阻塞状态 package main func main() { var c1 = make(chan int, 10) for i := 0; i < 10 ...
- Spark SQL基本概念与基本用法
1. Spark SQL概述 1.1 什么是Spark SQL Spark SQL是Spark用来处理结构化数据的一个模块,它提供了两个编程抽象分别叫做DataFrame和DataSet,它们用于作为 ...
- openstack ovs实现vlan组网
本文是配置文档,非说明文档,只讲配置,不讲原理. controller节点: 网卡信息:ens160 外网网卡 : ens192 数据网卡 /etc/neutron/plugins/ml2/ml2_c ...
- IO流--与properties集合配合使用
IO流--与properties集合配合使用: 注:生产上主要用于常量文件的配置,读取常量文件: 1:properties集合的放值与取值: /* * properties集合继承自hashTable ...
- FormatMessage
FormatMessage 获取GetLastError 函数返回的错误代码对应的字符串描述. #include <Windows.h>#include <tchar.h> V ...
- 数据结构Java实现01----线性表与顺序表
一.线性结构: 如果一个数据元素序列满足: (1)除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素: (2)第一个数据元素没有前驱数据元素: (3)最后一个数据元素没有 ...
- Gossip
http://www.cnblogs.com/xingzc/p/6165084.html 敬请期待...
- C# WinForm多线程(一)----- Thread类库
Windows是一个多任务的系统,如果你使用的是windows 2000及其以上版本,你可以通过任务管理器查看当前系统运行的程序和进程.什么是进程呢?当一个程序开始运行时,它就是一个进程,进程所指包括 ...
- visual studio code运行时报错,无法将“cnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称,Cannot find module 'webpack'
前言 因公司技术需求,这段时间成功进入了Vue 2.0 的坑,刚用起Visual Studio Code,却发现问题很多,发现一个错误:cnpm : 无法将“cnpm”项识别为 cmdlet.函数.脚 ...
- 实验吧 smali文件分析
题目链接:http://www.shiyanbar.com/ctf/1871 好吧,这题真是基础中的基础,基础中的战斗机. 不光没有任何绕弯的地方,逻辑有且仅有一个.... 多说无益,使用工具jadx ...