Hibernate中的Session管理和对话实现
2014-01-27 14:55
162 查看
1 管理Session对象
Session对象的管理方式:应用程序序自主管理Session;
Hibernate管理Session。
1.1 应用程序自主管理Session
应用程序自主管理Session对象的生命周期时,何时创建Session、何时清理缓存及何时关闭Session都有程序负责。缺点:1)代码重复;2)多个类共享同一个Session对象比较麻烦。
1.2 Hibernate管理Session
Hibernate管理Session的三种方式:Session对象的生命周期与本地线程绑定(Hibernate负责将Session与本地线程绑定)
Session对象的生命周期与JTA事务绑定
Hibernate 委托程序管理Session对象的生命周期(也就是说,应用程序自主管理Session对象时,借助于Hibernate将Session与本地线程绑定)
在Hibernate的配置文件Hibernate.cfg.xml中设置session的管理方式:
<property name="current_session_context_class">thread</property> //thread也可以换成jta或managed,分别对应三种管理方式;
1 Session对象的生命周期与本地线程绑定
创建Session:当一个线程调用SessionFactory的getCurrentSession()方法,而且此时没有Session与当前线程绑定时,Hibernate自动创建Session对象
关闭Session:当一个线程提交或撤销事务后,Hibernate自动关闭Session对象。
2 Session对象生命周期与JTA事务绑定
创建Session:当一个线程调用SessionFactory的getCurrentSession()方法,而且此时没有Session与当前JTA事务绑定时,Hibernate自动创建Session对象
关闭Session:当一个线程提交或撤销JTA事务后,Hibernate自动关闭Session对象。
Session对象与本地线程和与JTA事务绑定的区别:
前者是先有Session对象,然后由Session对象的beginTransaction()方法声明一个事务;而后者是先通过UserTransaction接口声明开始一个JTA事务,然后出现与该JTA绑定的Session对象。
3 Hibernate委托程序管理Session对象
org.hibernate.context.ManagedSessionContext的静态方法:
bind(Session session):把Session与当前线程绑定。
unbind(SessionFactory factory):解除Session对象与当前线程的绑定。
hasBind(SessionFactory factory):判断是否存在与当前线程绑定的Session对象。
应用程序可以利用上面提供的方法来将session对象与当前线程绑定。
创建Session :Session对象由程序决定何时创建,当程序创建Session对象后或者声明开始一个事务前,利用bind()方法将Session与当前线程绑定。
关闭Sesssion:程序决定何时关闭一个Session对象。当程序提交一个事务之前,调用unbind()方法,解除Session对象与当前线程的绑定。
2 实现对话
对话:包含了用户思考时间的长工作单元。会话必须满足:1. 数据一致性,即防止并发问题。2. 原子性。对话的实现方式有三种:
整个对话对应一个事务,并且与一个Session对象对应。1:1:1
使用游离对象:一个对话包括多个短事务,并且每个短事务对应一个单独的Session对象。事务之间通过游离对象传递业务数据。1:n:n
使用手工缓存模式下的Session对象:一个对话包含多个短事务,并且整个对话对应一个Session对象。1:n:1
三种实现对话方式比较如下图所示:
相关文章推荐
- :Hibernate逍遥游记-第16管理session和实现对话
- hibernate 之 session在service层实现事务管理
- 利用过滤器对hibernate的session管理,实现session在线程范围内的共享
- [原创]WCF后续之旅(9): 通过WCF双向通信实现Session管理[Part II]
- Hibernate_在应用程序中使用的Session的管理方案
- hibernate,spring管理事务中(transaction,JDBC connection,Hibernate Session的使用)
- spring整合hibernate关于session的管理
- Spring+hibernate的session问题 声明事务管理是否起作用
- JavaSwing+Hibernate实现简单的学生信息管理系统
- 通过Spring Session实现新一代的Session管理【醍醐灌顶】
- WCF后续之旅(9):通过WCF的双向通信实现Session管理[上篇]
- Hibernate用ThreadLocal模式 (线程局部变量模式) 管理Session
- redis 管理HttpSession 实现Session 共享
- [原创]WCF后续之旅(9):通过WCF的双向通信实现Session管理[Part I]
- sna集中式session管理方案实现
- SpringMVC学习系列(12) 完结篇 之 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现
- spring整合hibernate关于session的管理
- Hibernate中的Session管理
- Spring Session实现Session管理的原理与详细配置
- spring整合hibernate关于session的管理