龙空技术网

Hibernate 的 Session,项目获取方式如何抉择?

会飞的鱼go 101

前言:

今天大家对“如何获取session对象”大约比较看重,兄弟们都想要学习一些“如何获取session对象”的相关知识。那么小编在网摘上搜集了一些关于“如何获取session对象””的相关文章,希望咱们能喜欢,朋友们快快来学习一下吧!

Hibernate 的 Session ,项目获取方式如何抉择?

文章来源:成都科多大数据

Session:是应用程序与数据库之间的一个会话,是Hibernate运作的中心,持久层操作的基础.对象的生命周期/事务的管理/数据库的存取都与Session息息相关.

Session对象是通过SessionFactory构建的,下面举个例子来介绍Hibernate两种获取session的方式。

日志,是编程中很常见的一个关注点.用户在对数据库进行操作的过程需要将这一系列操作记录,以便跟踪数据库的动态.那么一个用户在向数据库插入一条记录的时候,就要向日志文件中记录一条记录,用户的一系列操作都要在一个Session中进行,否则这就成为了两个线程.不能保证同步.看下面的代码

HibernateUtil管理Session的工具类

注意:

1.openSession和getCurrentSession的区别?

openSession必须关闭,currentSession在事务结束后自动关闭

openSession没有和当前线程绑定,currentSession和当前线程绑定

2.如果使用currentSession需要在hibernate.cfg.xml文件中进行配置:

如果是本地事务(jdbc事务)

<propertyname="hibernate.current_session_context_class">thread</property>

如果是全局事务(jta事务)

<propertyname="hibernate.current_session_context_class">jta</property>

如果在 ssh 中的 sessionFactory 配置中,如果使用 spring 管理事务

应将 hibernate.current_session_context_class 设为 org.springframework.orm.hibernate4.SpringSessionContext

全局事务:资源管理器管理和协调的事务,可以跨越多个数据库和进程。资源管理器一般使用XA 二阶段提交协议与"企业信息系统"(EIS) 或数据库进行交互。

本地事务:在单个 EIS或数据库的本地并且限制在单个进程内的事务。本地事务不涉及多个数据来源。

在工作中,当然是推荐使用 getCurrentSession,高效绿色环保,还可以配合 spring 管理事务,何乐不为呢?

标签: #如何获取session对象