前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hibernate进阶篇(三)——transaction简介

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

作者头像
MickyInvQ
发布2020-09-27 15:16:03
6210
发布2020-09-27 15:16:03
举报
文章被收录于专栏:InvQ的专栏InvQ的专栏

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

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

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

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

代码语言:javascript
复制
@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语句
		}

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

代码语言:javascript
复制
transaction=session.beginTransaction();

以及提交事务的语句,

代码语言:javascript
复制
transaction.commit();//提交事务

那么,

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-06-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档