Hibernate进阶篇(三)——transaction简介

转载请注明:http://blog.csdn.net/uniquewonderq

上次在说session的时候,要执行session方法的时候要把它方法事务当中,也就是说Hibernate对数据进行的操作都是封装在书屋当中,并且默认是非自动提交方式。所以用session保存对象时,如果不开启事务,并且手工提交事务,这个对象并不会真正的保存在数据库中。

我们知道jdbc是自动提交事务的。如果你想让hibernate像jdbc那样自动提交事务,必须调用session对象的doWork()方法,
获得jdbc的connection后,设置其为自动提交事务模式。(注意:通常并不推荐这么做)

下面通过一个例子来演示,使用事务的重要性。

@Before
		public void init(){
			//创建配置对象
			Configuration config=new Configuration().configure();
			//创建服务注册对象
			ServiceRegistry serviceRegistry=new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
			//创建会话工厂对象
			sessionFactory=config.buildSessionFactory(serviceRegistry);
			//创建会话对象
			session=sessionFactory.openSession();
			//开启事务
			transaction=session.beginTransaction();
		}
		@After
		public void destroy(){
			transaction.commit();//提交事务
			session.close();//关闭会话
			sessionFactory.close();//关闭会话工厂
		}
		@Test
		public void testSaveStudents(){//保存学生用例对象
			//生成学生对象
			Students s1=new Students(2,"有缘人","女",new Date(),"地球");
			session.save(s1);//保存对象进入数据库,无须写sql语句
		}

如果注释掉开启事务的语句

transaction=session.beginTransaction();

以及提交事务的语句,

transaction.commit();//提交事务

那么,

执行完后,你会发现,数据库里面并没有新的记录被添加。如果调用session 的dowork方法之后,要重写父类的

execute方法,将setAutoCommit()方法设置为true,并且还是进行一个flush()方法的调用,比较麻烦。而且手续繁多,最要命的是不符合Hibernate的风格。所以不推荐使用。

时间: 2024-10-28 22:18:17

Hibernate进阶篇(三)——transaction简介的相关文章

Hibernate进阶篇(五)——hbm.xml配置文档

转载请注明:http://blog.csdn.net/uniquewonderq <hibernate-mapping> schema="schemaName"//设置格式名字 catalog="catalogName"//设置目录名称 default-cascade="cascade_style"//级联风格 default-access="field|property|ClassName"//访问策略 defa

(Hibernate进阶)Hibernate系列——总结篇(九)

这篇博文是hibernate系列的最后一篇,既然是最后一篇,我们就应该进行一下从头到尾,整体上的总结,将这个系列的内容融会贯通. 概念 Hibernate是一个对象关系映射框架,当然从分层的角度看,我们也说它是数据持久层的框架. 我们从上一句话可以看出Hibernate的核心:面向对象.关系映射以及数据持久化.前面两个概念很容易理解,而对于"数据持久化",就是将数据或者某物体,永久的保存起来.现实生活中的例子有很多,例如:鲜肉冷藏,水果做成罐头,而对于编程而言就是将数据保存在文件或磁盘

位运算简介及实用技巧(二):进阶篇(1)[转]

位运算简介及实用技巧(二):进阶篇(1) 原贴链接:http://www.matrix67.com/blog/archives/264 =====   真正强的东西来了!   ===== 二进制中的1有奇数个还是偶数个    我们可以用下面的代码来计算一个32位整数的二进制中1的个数的奇偶性,当输入数据的二进制表示里有偶数个数字1时程序输出0,有奇数个则输出1.例如,1314520的二进制101000000111011011000中有9个1,则x=1314520时程序输出1.var   i,x,

java web进阶篇(三) 表达式语言

表达式语言(Expression Language ,EL)是jsp2.0中新增的功能.可以避免出现许多的Scriptlet代码 格式: ${ 属性名称 },  使用表达式语言可以方便的访问对象中的属性,提交的参数或者进行各种数学运算,而且使用表达式语言最大的特点是如果输出的内容是null,则会自动使用空字符串("")表示. <%request.setAttribute("name", "info");%> <h1>${n

GSON使用的学习笔记,进阶篇(三)

本篇笔记内容比较杂乱,没有专门去整理. TypeAdapter 现在轮到TypeAdapter类上场,但考虑到gson默认行为已足够强大,加上项目实践中应用json时场景不会太复杂,所以一般不需要自定义TypeAdapter.TypeAdapter优点是集成了JsonWriter和JsonReader两个类,定义了一套与gson框架交互的良好接口,同时便于管理编码和解码的实现代码,不至于太零碎.因而在了解JsonReader和JsonWriter的使用方法之后,自定义TypeAdapter类来完

JSON进阶第三篇 apache多域名及JSON的跨域问题(JSONP)

本文先介绍如何为apache配置多域名,然后再用JSONP(JSON with Padding)来解决JSON的跨域问题. 阅读本文之前,推荐先参阅<JSON进阶第二篇AJAX方式传递JSON数据>. 一.apache配置多域名 在apache的conf目录下找到httpd.conf,然后在该文件最后增加如下内容: # 声明使用虚拟主机过滤规则 NameVirtualHost*:80 #虚拟主机localhost <VirtualHost*:80> ServerName  loca

Python之路【第十七篇】:Django【进阶篇 】

Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetList(sql): db = MySQLdb.connect(user='root', db='wupeiqidb', passwd='1234', host='localhost')

Python之路【第十七篇】:Django之【进阶篇】

Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetList(sql): db = MySQLdb.connect(user='root', db='wupeiqidb', passwd='1234', host='localhost')

Python之路【第十七篇】:Django【进阶篇】

Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetList(sql): db = MySQLdb.connect(user='root', db='wupeiqidb', passwd='1234', host='localhost')