hibernate的事务管理和session对象的详解
//开启事务
transaction=session.beginTransaction();
上面为开启事务
transaction.commit();这个为提交事务
从session对象中获取事务后进行提交
下面可以自动提交事务,并且可以不需要对于这个事务进行提交,但是不推荐这样进行使用这个方法
session.doWork(new Work() {
//这里的connection对象就是jdbc中的对象
@Override
public void execute(Connection connection) throws SQLException {
// TODO Auto-generated method stub
connection.setAutoCommit(true);//设置自动提交事务
}
});
在设置自动提交事务后必须对session进行刷新操作后才能有效
session.flush();//对于事务设成自动提交后需要对session进行刷新后才能使用
openSession 每次使用都是打开一个新的session,使用完需要调用close方法关闭session;如果不关闭会导致每次都打开一个connection对象,最后导致连接池溢出
getCurrentSession 是获取当前session对象,连续使用多次时,得到的session都是同一个对象,这就是与openSession的区别之一 ;
一般在实际开发中,往往使用getCurrentSession多,因为一般是处理同一个事务,所以在一般情况下比较少使用openSession;
如何获得session对象???
(1)openSessionion
(2)getCurrentSession
如果使用getCurrentSession需要在hibernate.cfg.xml文件中进行配置:
如果是本地事务(jdbc事务)
<property name="hibernate.current_session_context_class">thread</property>
如果是全局事务(jta事务)
<property name="hibernate.current_session_context_class">jta</property>
package cn.lonecloud.test; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.Test; public class SessionTest { @Test
public void TestOpenSession() {
Configuration configuration = new Configuration().configure();// 获得配置文件对象
ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(configuration.getProperties())
.buildServiceRegistry();//获得服务注册对象
SessionFactory factory=configuration.buildSessionFactory(registry);//获得session工厂对象
Session session=factory.openSession();//获取session对象
if (session!=null) {
System.out.println("Session 创建成功");
}else {
System.out.println("Session 创建失败");
} }
//在使用getCurrentSession的时候必须在cfg配置文件中进行配置
// <!--设置当前的session对象的类型thead为当前的jdbc的session对象 -->
// <!-- 如果是本地事务(jdbc事务) -->
// <property name="hibernate.current_session_context_class">thread</property>
//<!-- 如果是全局事务(jta事务)
// <property name="hibernate.current_session_context_class">jta</property> -->
@Test
public void TestCurrentSession(){
Configuration configuration = new Configuration().configure();// 获得配置文件对象
ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(configuration.getProperties())
.buildServiceRegistry();//获得服务注册对象
SessionFactory factory=configuration.buildSessionFactory(registry);//获得session工厂对象
Session session=factory.getCurrentSession();//获取session对象
if (session!=null) {
System.out.println("Session 创建成功");
}else {
System.out.println("Session 创建失败");
}
}
}
hibernate的事务管理和session对象的详解的更多相关文章
- python web开发-flask中response,cookies,session对象使用详解
Response响应对象: 当一个web请求被服务器处理完后,会返回用户请求的响应,这时候就要用到响应对象,根据响应给用户的形式不同,响应对象有以下几种处理方式 如果返回的是一个合法的响应对象,它会从 ...
- Session和Cookie详解(1)
面试常问的有关session和cookie的问题: 1.session在分布式环境下怎么解决 2.集群下如何保证session踩中 3.cookie的大小 4.服务器怎么识别一个用户的 5.sessi ...
- Hibernate注解----关联映射注解以及课程总结详解----图片版本
上一篇,记录了Hibernate注解----类级别注解以及属性注解详解 ,我们这一节主要讲解的是Hibernate注解----关联映射注解以及课程总结详解. 本节的主要内容: 第3章 关联映射注解 3 ...
- javascript event(事件对象)详解
javascript event(事件对象)详解 1. 事件对象 1. 事件对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 什 ...
- 010-Scala单例对象、伴生对象实战详解
010-Scala单例对象.伴生对象实战详解 Scala单例对象详解 函数的最后一行是返回值 子项目 Scala伴生对象代码实战 object对象的私有成员可以直接被class伴生类访问,但是不可以被 ...
- openerp经典收藏 对象定义详解(转载)
对象定义详解 原文地址:http://shine-it.net/index.php/topic,2159.0.htmlhttp://blog.sina.com.cn/s/blog_57ded94e01 ...
- cookie 与 session 的区别详解
[转]cookie 与session 的区别详解 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录下来.当 ...
- Cookie,Session,Token详解
Cookie,Session,Token详解 Cookie : 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能. Cookie由服务器生成,发 ...
- JAVA对象头详解(含32位虚拟机与64位虚拟机)
为什么要学习Java对象头 学习Java对象头主要是为了解synchronized底层原理,synchronized锁升级过程,Java并发编程等. JAVA对象头 由于Java面向对象的思想,在JV ...
随机推荐
- JavaScript对象的valueOf()方法
js对象中的valueOf()方法和toString()方法非常类似,但是,当需要返回对象的原始值而非字符串的时候才调用它,尤其是转换为数字的时候.如果在需要使用原始值的上下文中使用了对象,JavaS ...
- 记录linux tty的一次软锁排查
本过程参照了某大侠的https://github.com/w-simon/debug/blob/master/tty_lock_cause_sytemd_hung , 当第二次出现的时候,还是排查了一 ...
- P1361 小M的作物
P1361 小M的作物 题目描述 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子有1个(就是可以种一棵作物)(用1...n编号). 现在,第 ...
- RocketMQ-顺序消费
看了https://www.jianshu.com/p/453c6e7ff81c这篇博客,得出顺序消费的结论."要实现严格的顺序消息,简单且可行的办法就是:保证生产者 - MQServer ...
- linux_文件权限
权限贯穿linux整个系统 创建文件或目录,属主和组都是当前用户 linux权限位? 9位基础权限位, 3位一组,总共12位权限 用户对文件权限,相当于你的笔记本 r 读 4 w ...
- JS实现倒计时
HTML部分: <div class="div"> <div id="div"> </div> </div> C ...
- git 安装使用
系统ubuntu14.04 1.安装:sudo apt-get install git 2.设置name and Email: git config --global user.name " ...
- UUID.randomUUID().toString()
UUID.randomUUID().toString()是javaJDK提供的一个自动生成主键的方法.UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机 ...
- apache编译安装参数说明
apache编译安装参数说明 ./configure //配置源代码树--prefix=/usr/local/apache2 //体系无关文件的顶级安装目录prefix ,也就apache的安装目录. ...
- python 字符串操作方法详解
字符串序列用于表示和存储文本,python中字符串是不可变对象.字符串是一个有序的字符的集合,用于存储和表示基本的文本信息,一对单,双或三引号中间包含的内容称之为字符串.其中三引号可以由多行组成,编写 ...