Hibernate的session是怎么创建的

 我来答
匿名用户
推荐于2016-07-14
展开全部
  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;
  }
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式