Hibernate进阶篇(三)——transaction简介
时间:2022-07-25
本文章向大家介绍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的风格。所以不推荐使用。
- 常用统计分析 SQL 在 AWK 中的实现
- java 中 16 进制 HEX 转换成字节码形式的 UTF-8
- Hadoop 多表 join:map side join 范例
- 实战 windows7 下 eclipse 远程调试 linux hadoop
- Hive 在多维统计分析中的应用 & 技巧总结
- shell 学习笔记(18)
- Hive 中的复合数据结构简介以及一些函数的用法说明
- BloomFilter 简介及在 Hadoop reduce side join 中的应用
- 关于 hadoop reduce 阶段遍历 Iterable 的 2 个“坑”
- Hadoop Mapper 阶段将数据直接从 HDFS 导入 Hbase
- 译文 | 量化投资教程:投资组合优化与R实践
- 浅谈 java 中构建可执行 jar 包的几种方式
- python 日志模块 logging 详解
- 基于堆实现的优先级队列:PriorityQueue 解决 Top K 问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 探索 App Clips
- ES索引模糊查询
- Dubbo定时任务时间轮(Time Wheel)算法详解
- Vue 中 data 为什么必须是一个函数
- Windows下制作nodejs后台程序的脚本-开机自启动
- Siamese Network & Triplet NetWork
- js常用函数集锦(持续更新)
- 《Java从入门到失业》第五章:继承与多态(5.8-5.10):多态与Object类
- 构建一个适合stm32mp157系列开发板的嵌入式Linux系统
- linux 达梦数据库 命令行 卸载
- Access Control: Database(数据库访问控制)最新解析及完整解决方案
- 启动Apache Atlas时报错
- Apache Atlas 安装部署
- SwiftUI:禁止用户交互
- Qt音视频开发34-Onvif时间设置