首页 > 代码库 > hibernate学习4_openSession()与getCurrentSession()区别
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()必须手动关闭。
hibernate学习4_openSession()与getCurrentSession()区别
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。