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管理的更多相关文章

  1. hibernate框架学习笔记6:事务

    MySQL的事务.JDBC事务操作: 详细见这篇文章:比较详细 http://www.cnblogs.com/xuyiqing/p/8430214.html 如何在hibernate中配置隔离级别: ...

  2. [ SSH框架 ] Hibernate框架学习之二

    一.Hibernate持久化类的编写规范 1.什么是持久化类 Hibernate是持久层的ORM影射框架,专注于数据的持久化工作.所谓持久化,就是将内存中的数据永久存储到关系型数据库中.那么知道了什么 ...

  3. j2ee开发之hibernate框架学习笔记

    hibernate框架技术重点学习笔记 1.针对不同的数据库,有不同的数据库实现类,使其符号对应的数据库? mysqlDaoImpl oracleDaoImpl ... ... 2.对象和表记录的转换 ...

  4. 为什么要用Hibernate框架? 把SessionFactory,Session,Transcational封装成包含crud的工具类并且处理了事务,那不是用不着spring了?

    既然用Hibernate框架访问管理持久层,那为何又提到用Spring来管理以及整合Hibernate呢?把SessionFactory,Session,Transcational封装成包含crud的 ...

  5. hibernate框架学习笔记3:API详解

    Configuration对象: package api; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configur ...

  6. [ 学习笔记 ] Hibernate框架学习之一

    一.JavaEE开发三层结构和三大框架的对应关系: Struts2框架 -> 表现层 web层(MVC是表现层的设计模型) 业务层 service层 Hibernate框架 -> 持久层 ...

  7. [ SSH框架 ] Hibernate框架学习之三

    一.表关系的分析 Hibernate框架实现了ORM的思想,将关系数据库中表的数据映射成对象,使开发人员把对数据库的操作转化为对对象的操作,Hibernate的关联关系映射主要包括多表的映射配置.数据 ...

  8. hibernate框架学习之核心API

    ConfigurationSessionFactorySessionTransactionQueryCriteria Configuration Configuration对象用于封装Hibernat ...

  9. hibernate框架学习笔记1:搭建与测试

    hibernate框架属于dao层,类似dbutils的作用,是一款ORM(对象关系映射)操作 使用hibernate框架好处是:操作数据库不需要写SQL语句,使用面向对象的方式完成 这里使用ecli ...

随机推荐

  1. shop++之language

    shop++商城改造此次感悟最深的就是封装.有些东西要整明白就得花点时间. 代码中经常用到这种,我照葫芦画瓢竟然没有用. 天啦,竟然是自己没有定义,还以为是什么高级自动的玩意呢? 文件结构如下: 后面 ...

  2. mq【转】

    kafka解决了什么问题? mq的几个指标 1.消息堆积能力.两亿条1k大小消息体的消息发上来,积压一周不消费,机器哭不哭. 2.吞吐量.来个峰值,每秒两万,连续两小时,临时扩容扛不扛得住. 3.安全 ...

  3. WebStorm记录(1)

    开始写前端,使用WebStorm,记录下使用过程 参考 WebStorm 初步使用 & HTML5 学习报告 webstorm怎么运行调试html WebStorm 快速开发教程 --CSS篇 ...

  4. 【1】【leetcode-79】 单词搜索

    (典型dfs,知道思想写错) 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格.同一个单 ...

  5. vue中nextTick

    vue中nextTick可以拿到更新后的DOM元素 如果在mounted下不能准确拿到DOM元素,可以使用nextTick 在Vue生命周期的created()钩子函数进行的DOM操作一定要放在Vue ...

  6. cookie与session的区别与关系

    cookie与session的区别 1. 存储位置不同 cookie存储在浏览器中 session存储在服务端里 2. 大小不同 cookie最大4K session由于是存在服务端,因此理论上没有大 ...

  7. 【转载】C# 字符串截取

    https://blog.csdn.net/maba007/article/details/78424760

  8. Nginx 配置反向代理后,页面中取绝对URL地址的问题显示代理端口

    本文有V型知识库提供 upstream tomcat {    server 127.0.0.1:82;} location / {     proxy_pass http://tomcat;} 如上 ...

  9. WMware虚拟机中连接ios真机

    虚拟机中能看到IOS真机,但MAC OS看不到,进行如下设置虚拟机设置->USB控制器->USB兼容性->选择2.0

  10. 关于MySQL数据库——增删改查语句集锦

    一.基本的sql语句 CRUD操作:create 创建(添加)read 读取update 修改delete 删除 1.添加数据insert into Info values('p009','张三',1 ...