Hibernate getCurrentSession()和openSession()的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate getCurrentSession()和openSession()的区别相关的知识,希望对你有一定的参考价值。

  1. 通过getCurrentSession()创建的Session会绑定到当前线程上;openSession()不会。
  2. 通过getCurrentSession()获取Session,首先是从当前上下文中寻找旧的Session,如果没有,则创建新的Session;而openSession()是每次都创建新的Session。
  3. getCurrentSession()创建的Session在事物提交时自动关闭;openSession()创建的Session需要手动关闭。
     1     @Test
     2     public void testTeacherSave() {
     3     
     4         Teacher t = new Teacher();
     5         
     6         t.setName("t1");
     7         t.setTitle("middle");
     8         t.setBirthDate(new Date());
     9         
    10         Session session = sessionFactory.openSession();
    11         //Session session = sessionFactory.getCurrentSession();
    12         
    13         session.beginTransaction();
    14         session.save(t);
    15         
    16         Session session2 = sessionFactory.getCurrentSession();
    17         
    18         System.out.println(session == session2);
    19         
    20         session.getTransaction().commit();
    21         
    22         Session session3 = sessionFactory.getCurrentSession();
    23         
    24         System.out.println(session == session3);
    25         
    26     }

    输出:Hibernate:
        insert
        into
            Teacher
            (birthDate, gender, good, name, title)
        values
            (?, ?, ?, ?, ?)
    false
    false

     1 @Test
     2     public void testTeacherSave() {
     3     
     4         Teacher t = new Teacher();
     5         
     6         t.setName("t1");
     7         t.setTitle("middle");
     8         t.setBirthDate(new Date());
     9         
    10         //Session session = sessionFactory.openSession();
    11         Session session = sessionFactory.getCurrentSession();
    12         
    13         session.beginTransaction();
    14         session.save(t);
    15         
    16         Session session2 = sessionFactory.getCurrentSession();
    17         
    18         System.out.println(session == session2);
    19         
    20         session.getTransaction().commit();
    21         
    22         Session session3 = sessionFactory.getCurrentSession();
    23         
    24         System.out.println(session == session3);
    25         
    26     }

    输出:Hibernate:
        insert
        into
            Teacher
            (birthDate, gender, good, name, title)
        values
            (?, ?, ?, ?, ?)
    true
    false

以上是关于Hibernate getCurrentSession()和openSession()的区别的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate中getCurrentSession()与openSession()的区别及应用

Hibernate框架使用 getCurrentSession()获取Session对象相关问题

hibernate如果要使用getCurrentSession

hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别

hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别

用hibernate的 getCurrentSession取的 session啥时候关闭?