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

  • 相关阅读:
    ASP.NET MVC 3.0 新特性之Controller
    ASP.NET MVC 3.0 新特性之View
    微软AD活动目录介绍
    ASP.NET MVC 3.0 新特性之Model
    [ASP.NET MVC3]Chart的ActionResult扩展]
    MVC3RAZOR尝鲜之漂亮的chart图表
    VS2003配置和使用AJAX
    Django操作cookie和session
    Django的forms组件
    开发一个简易的图书增删改查页面
  • 原文地址:https://www.cnblogs.com/toDjlPersonnalBlog/p/4243059.html
Copyright © 2011-2022 走看看