zoukankan      html  css  js  c++  java
  • hibernate学习4_openSession()与getCurrentSession()区别

    hibernate读取配置文件创建sessionBuildFactory后可以通过如下两种方式建立session

    (1)openSession()

         此方法每次会生成一个新session

      如下测试后返回false,说明两次生成的session不是同一个session

        @Test
        public  void testOpenSession(){
            Session session1 = sf.openSession();
            Session session2 = sf.openSession();
            System.out.println(session1==session2);
        }

    注意:每次opensession执行后需要手动关闭session

    (2) getCurrentSession()

     此方法从上下文中获取session,如果上下文中没有,则自动生成一个session

     如下执行后,前一个返回true,后一个返回false

        
        @Test
        public void testGetCurSession(){
            Session session1 = sf.getCurrentSession();
            Session session2 = sf.openSession();
            Session session3 = sf.getCurrentSession();
            System.out.println(session1==session2);
            System.out.println(session3==session2);

    如下测试后返回true,说明两次生成的session不是同一个session

    常见的上下文有thread和JTA,在hibernate.cfg.xml中配置

             <!-- Enable Hibernate's automatic session context management -->
            <property name="current_session_context_class">thread</property>

     thread :即从当前线程中获取。

        JTA  : 管理分布式数据库

    实际在应用中,一般用getCurrentSession()来界定事务边界,openSession()产生多个session不在一个事务中,难以界定。

    除此外,getCurrentSession()中session提交后会自动关闭,手动关闭会报错

            而openSession()必须手动关闭。

  • 相关阅读:
    跨数据库操作
    Windows 服务
    Linq To DataTable
    嵌入式软件应用程序开发框架浅见
    31.获取当前系统时间
    30 System类
    29. StringBuilder
    28. string类中方法练习
    27 string类中常用的方法列表
    26.String类(1)
  • 原文地址:https://www.cnblogs.com/toDjlPersonnalBlog/p/4243059.html
Copyright © 2011-2022 走看看