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 ...
随机推荐
- Dubbo服务的运行方式
1.使用Servlet容器运行(Tomcat.Jetty)等 ---不可取 缺点:增加复杂性(端口,管理) 浪费资源(内存) 2.自建Main方法类来运行(Spring容器) ---不建议(本地调试可 ...
- mssql 数据库表行转列,列转行 比较经典
--行列互转 /******************************************************************************************** ...
- Ubuntu 启动服务 失败 的 可能解决办法
➜ ~ service nfs-kernel-server start Job for nfs-server.service canceled. 如果遇到服务启动失败,请检查有关的文件夹是否创建( ...
- Java实现OPC通信
1.PLC和OPC 使用的PLC:西门子的S7 300,具体型号如下图 使用的OPC server软件: 模拟仿真用的 MatrikonOPCSimulation(50M),百度网盘,密码: mcur ...
- Vue 架构
vue 一.认识Vue 定义:一个构建数据驱动的 web 界面的渐进式框架 优点: 1.可以完全通过客户端浏览器渲染页面,服务器端只提供数据 2.方便构建单页面应用程序(SPA) 二.引入Vue &l ...
- .Net版微信支付
一. 案例介绍 这里模拟一个实际业务场景,进行介绍微信支付,业务功能包括:登录.注册.充值.查看充值记录. 页面图: 二. 概要设计 1.数据库设计 这里数据库包括两张表:用户表和订单表. ...
- 百度编辑器 ueditor 会屏蔽过滤 body html head DOCTYPE ... 的解决办法
百度编辑器很强,但有时候复制到html里时,会带有 body html head 等标签,切到视图时,内容都不见了 是因为白名单 解决办法: 我测的是1.4.3版本 在 ueditor.config ...
- java7 java MethodHandle解析
简介 JDK6之前我们会使用java反射来实现动态方法调用,多数框架用反射的比较多,例如mybatis.spring等.在JDK7中,新增了java.lang.invoke.MethodHandle( ...
- Java8新特性_日期时间新类 LocalDate、LocalTime、LocalDateTime
import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.format.DateTimeForma ...
- Java实现猜数字,附带提示功能。
很简单的一段代码: package com.changeyd.demo; import java.util.Random;import java.util.Scanner;public class M ...