getCurrentSession and openSession
来源:互联网 发布:淘宝怎么卖游戏帐号 编辑:程序博客网 时间:2024/06/06 15:38
在spring配置文件中,只需要配置在sessionFactory配置
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
LocalSessionFactoryBean实现了org.springframework.beans.factory.FactoryBean接口,
spring在装配的时候, 如果发现实现了org.springframework.beans.factory.FactoryBean接口,
就会使用FactoryBean#getObject() 方法返回的对象装配,具体的可以看下文档.
如果你想拿到LocalSessionFactoryBean实例, 在id前面加个'&'就可以了,在你的配置文件中BeanFactory.getBean('&sessionFactory')拿
的就是LocalSessionFactoryBean的实例.
所以通过spring框架,LocalSessionFactoryBean可以生成factoryBean,可以通过factoryBean.getCurrentSession获取session。并不需要在hibernate中配置
<property name="hibernate.current_session_context_class">jta</property>
1、getCurrentSession()与openSession()的区别?
<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 启动的时候, Hibernate 会根据配置创建相应的 CurrentSessionContext ,在getCurrentSession() 被调用的时候,实际被执行的方法是 CurrentSessionContext.currentSession() 。在currentSession() 执行时,如果当前 Session 为空, currentSession 会调用 SessionFactory 的 openSession 。所以 getCurrentSession() 对于 Java EE 来说是更好的获取 Session 的方法。
- hibernate openSession and getCurrentSEssion
- getCurrentSession and openSession
- getCurrentSession and openSession() 的区别
- getCurrentSession()与openSession() 区别
- openSession和getCurrentSession区别
- hibernate openSession() 与 getCurrentSession()
- hibernate openSession和getCurrentSession
- openSession与getCurrentSession
- openSession() getCurrentSession() 区别
- getCurrentSession与openSession区别
- openSession和getCurrentSession
- openSession和getCurrentSession 比较
- Hibernate getCurrentSession openSession
- openSession、getCurrentSession区别
- getCurrentSession与openSession详解
- getCurrentSession与openSession区别
- openSession与getCurrentSession区别
- opensession 和getcurrentsession区别
- HBase基本API(java)操作(增删改查)
- servlet页面中文乱码或是问号
- jquery.validate+jquery.form提交的三种方式
- 解决linux下javac -version和java -version版本显示不一致
- Linux常用命令
- getCurrentSession and openSession
- 人工智能-8-puzzle爬山法(最陡上升,首项选择),随即重新启动法
- 详解.NET异步
- iOS 9界面适配利器:详解Xcode 7的新特性UIStackView
- 公钥和私钥
- 自动Shader优化器glsl_optimizer的编译与使用
- 二叉树的构造
- Fedora添加开机启动项
- 解析html