SessionFactory.getCurrentSession与openSession的区别
来源:互联网 发布:淘宝卖家进入 编辑:程序博客网 时间:2024/05/18 02:03
SessionFactory.getCurrentSession与openSession的区别
1. 如果使用的是getCurrentSession来创建session的话,在commit后,session就自动被关闭了,
也就是不用再session.close()了。但是如果使用的是openSession方法创建的session的话,
那么必须显示的关闭session,也就是调用session.close()方法。这样commit后,session并没有关闭
2. getCurrentSession的使用可以参见hibernate/hibernate-3.2/doc/tutorial/src项目
3. 使用SessionFactory.getCurrentSession()需要在hibernate.cfg.xml中如下配置:
* 如果采用jdbc独立引用程序配置如下:
<property name="hibernate.current_session_context_class">thread</property>
* 如果采用了JTA事务配置如下
<property name="hibernate.current_session_context_class">jta</property>
利于ThreadLocal模式管理Session
早在Java1.2推出之时,Java平台中就引入了一个新的支持:java.lang.ThreadLocal,给我们在编写多线程程序
时提供了一种新的选择。ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,
而是thread local variable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。线程局部变量(ThreadLocal)
其实的功用非常简单,就是为每一个使用某变量的线程都提供一个该变量值的副本,是每一个线程都可以独立地改变自己的副本,
而不会和其它线程的副本冲突。从线程的角度看,就好像每一个线程都完全拥有一个该变量。
ThreadLocal是如何做到为每一个线程维护变量的副本的呢?其实实现的思路很简单,在ThreadLocal类中有一个Map,
用于存储每一个线程的变量的副本。比如下面的示例实现(为了简单,没有考虑集合的泛型):
public class HibernateUtil {
public static final ThreadLocal session =new ThreadLocal();
public static final SessionFactory sessionFactory;
static {
try {
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}
public static Session currentSession() throws HibernateException {
Session s = session.get();
if(s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
public static void closeSession() throws HibernateException {
Session s = session.get();
if(s != null) {
s.close();
}
session.set(null);
}
}
- SessionFactory.getCurrentSession与openSession的区别
- SessionFactory.getCurrentSession与openSession的区别
- SessionFactory.getCurrentSession与openSession的区别
- SessionFactory.getCurrentSession与openSession的区别
- SessionFactory.getCurrentSession与openSession的区别
- SessionFactory.getCurrentSession与openSession的区别
- SessionFactory.getCurrentSession与openSession的区别
- SessionFactory.getCurrentSession与openSession的区别
- SessionFactory.getCurrentSession与openSession的区别
- SessionFactory.getCurrentSession与openSession的区别
- sessionFactory().getCurrentSession()和sessionFactory().openSession的区别
- hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别
- hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别
- hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别
- hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别
- hibernate的SessionFactory的getCurrentSession 与 openSession() 的区别
- hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别
- (hibernate之一)Sessionfactory的getCurrentSession与openSession的区别
- vs2012注册码
- (二十三)进程——获取进程id相关函数的介绍和使用
- java正则表达式
- python Nltk 自然语言安装包安装教程
- CentOS 7 安装KVM,并创建虚拟机
- SessionFactory.getCurrentSession与openSession的区别
- Android View 测量流程(Measure)完全解析
- 4-6 带头结点的链式表操作集 (20分)
- 电脑突然变成繁体字,格式化代码快捷键失灵
- 链接
- Android APP集成新浪微博分享功能
- Android的TextView在显示文字的时候,如果有段中文有英文,有中文,有中文标点符号,你会发现,当要换行的时候遇到中文标点, 这一行就会空出很多空格出来
- 布隆过滤器Java实现Demo
- Android View 布局流程(Layout)完全解析