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()必须手动关闭。

  • 相关阅读:
    一个菜鸟把Vue项目打包为APP的道路
    echarts
    no module named selenium
    git使用教程
    JDK安装与环境变量配置
    家具摆件
    家店分会场
    双十一电器城
    室内门锁
    http://cjy.suda.edu.cn/File.aspx?id=427
  • 原文地址:https://www.cnblogs.com/toDjlPersonnalBlog/p/4243059.html
Copyright © 2011-2022 走看看