hibernate获取Session

     Session:是应用程序与数据库之间的一个会话,是Hibernate运作的中心,持久层操作的基础.对象的生命周期/事务的管理/数据库的存取都与Session息息相关.
1.Session对象是通过SessionFactory构建的,Hibernate获取session的 两种方式为 openSession和getCurrentSession
openSession每次都会打来一个新的Session,使用过后需要调用Session的close方法
getCurrentSession会在上下文中查找Session,找到就使用已有的Session,找不到时新建Session,Session在事务提交后自动关闭,不需要调用Session的close方法
2.使用条件
openSession必须关闭,currentSession在事务结束后自动关闭
openSession没有和当前线程绑定,currentSession和当前线程绑定
如果使用currentSession需要在hibernate.cfg.xml文件中进行配置:
   *如果是本地事务(jdbc事务)
     <propertyname="hibernate.current_session_context_class">thread</property>
   *如果是全局事务(jta事务)
   <propertyname="hibernate.current_session_context_class">jta</property>
全局事务:资源管理器管理和协调的事务,可以跨越多个数据库和进程。资源管理器一般使用XA 二阶段提交协议与“企业信息系统”(EIS) 或数据库进行交互。
本地事务:在单个 EIS或数据库的本地并且限制在单个进程内的事务。本地事务不涉及多个数据来源。
3.使用场合
这里主要说的是currentSession的使用场合。
currentSession和当前线程绑定,从上下文中取得session,可以通过一系列的操作共用一个session,操作完成之后再使用事务提交,这样能够保证这些操作的数据同步。比如实际使用的日志记录过程:
  日志,是编程中很常见的一个关注点.用户在对数据库进行操作的过程需要将这一系列操作记录,以便跟踪数据库的动态.那么一个用户在向数据库插入一条记录的时候,就要向日志文件中记录一条记录,用户的一系列操作都要在一个Session中进行,否则这就成为了两个线程.不能保证同步.这时就需要使用 currentSession来使用同一个session保存数据。
4.使用currentSession需要配置hibernate.cfg.xml
 <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>
5. currentSession的用法
@Test
	public void testStudent() {
		// 学生测试类
		Student s = new Student();
		StudentPK pk = new StudentPK();
		pk.setId("1");
		pk.setName("zhangsan");
		s.setPk(pk);
//		s.setName("s1");
		s.setAge(20);

		// 得到session
//		Session session = sf.openSession();
		Session session = sf.getCurrentSession();
		// 开启事务
		session.beginTransaction();
		// session执行save
		session.save(s);
		// 事务提交
		session.getTransaction().commit();
//		Session session2 = sf.getCurrentSession();
//		System.out.println(session==session2);
		
//		Session session2 = sf.openSession();
//		System.out.println(session==session2);
		// 关闭session
//		session.close();
	}


以上为hibernate取得session的简介,具体的使用要根据具体的需求和要求,比如执行效率等确定。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值