首页 > 代码库 > Hibernate getCurrentSession()和openSession()的区别

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()的区别