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; }
相关推荐
solarspot 2020-07-28
houmenghu 2020-11-17
思君夜未眠 2020-08-25
阳光之吻 2020-08-03
mbcsdn 2020-06-05
我心似明月 2020-11-09
oraclemch 2020-11-06
ltd00 2020-09-12
康慧欣 2020-09-10
waveclouds 2020-09-04
蓝色深海 2020-09-15
jincheng 2020-09-01
取个好名字真难 2020-08-06
歆萌 2020-08-03
婷婷小屋 2020-07-28
MLXY 2020-07-26
dxbjfu0 2020-07-26
songbinxu 2020-07-19