Hibernate的session是怎么创建的

Hibernat 对数据库的操作是通过Session来实现的,这里的session不同于页面间传递参数的session,
而是类似于JDBC中的 Connection。Session是Hibernate运作的中心,对象的生命周期、事务的管理、数据库的存取都与session息息相关。
  Session是由HibernateSessionFactory创建的,是线程安全的,可以让多个执行线程同时存取     
HibernateSessionFactory而不会有数据共享的问题,但不能让多个线程共享一个Session。
SessionFactory对象的创建:

Configuration cfg = new Configuration().configure();
SessionFactory sessions = cfg.buildSessionFactory();

session创建时使用了一个ThreadLocal类来建立一个Session管理的辅助类,使用ThreadLocal可以有效隔离执行所用的数据,
避开了Session的多线程之间的数据共享问题。

//创建一个线程本地变量。

public static final ThreadLocal<Session> threadlocal = new ThreadLocal<Session>();
public static org.hibernate.SessionFactory sessionFactory;

//获取session的方法
public static Sessin getSession() throws HibernateException{
//返回线程局部变量的当前线程的值
Session s = (Session)threadLocal.get();
//如果sessionFactory为空,重新创建sessionFactory;如果线程为空,就打开一个新的session
if(session==null || !session.isOpen()){
if(sessionFactory == null){
rebuildSessionFactory(); session = (sessionFactory != null) sessionFactory.openSession():null;
// 将hibernate的session放入到线程中保存;只要这个线程不结束,都可以通过线程的get()方法来获取
threadLocal.set(session);return session;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值