Hibernate学习笔记四:事务管理
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6768298.html
一:需要事务的Session操作
Session操作中,查询类操作是不需要事务就能生效的,如get、query等。
而save、update、delete等操作,则需要提交事务才能生效。
二:DAO层事务管理的缺点
DAO层主要负责数据的持久化操作,因此,也是session操作的主要位置。我们一般在DAO层针对一个表定义增删查改操作的方法,一个方法一个功能。因此,如果在DAO进行事务管理的话,就要每个方法 开启事务——session操作——提交事务——关闭session,这会产生大量重复代码,并且不灵活,如:懒加载(var=session.load(POJO))时,查询变量var在被调用时,才会触发SQL语句进行数据库查询,而在此之前session不能被关闭。如果这个变量被发布出去,如:return到service层,那我们只能在service层关闭session了,这样又要考虑session的传递问题,十分麻烦。
三:一般的事务管理策略
在service中定义事务,是最正确的方式。因为一个service层方法对应着一个业务,一个业务中可能有多个数据操作,因此我们“以业务为单位进行事务管理”。
四:懒加载事务管理
用懒加载查询得到的变量,如果发布到了其他层使用,那么事务管理、session关闭都要随之迁移。既然如此,我们干脆就在“唯一入口和出口”处进行事务管理与session的开启关闭,那就是——Filter。
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
Transaction tx = null;
try {
Session session = HibernateSessionFactory.getSession();
tx = session.beginTransaction();
chain.doFilter(request, response);//传递进去,经历各层处理、View层响应
tx.commit();
} catch (Exception e) {
if (tx!=null&tx.isActive()) {//如果Transcation依旧存在,即系出现异常,回滚事务
tx.rollback();
}
} finally{
session.close();
}
}
Hibernate学习笔记四:事务管理的更多相关文章
- StackExchange.Redis学习笔记(四) 事务控制和Batch批量操作
Redis事物 Redis命令实现事务 Redis的事物包含在multi和exec(执行)或者discard(回滚)命令中 和sql事务不同的是,Redis调用Exec只是将所有的命令变成一个单元一起 ...
- Hibernate学习笔记四 查询
HQL语法 1.基本语法 String hql = " from com.yyb.domain.Customer ";//完整写法 String hql2 = " fro ...
- Hibernate学习笔记四
1 整合log4j(了解) l slf4j 核心jar : slf4j-api-1.6.1.jar .slf4j是日志框架,将其他优秀的日志第三方进行整合. l 整合导入jar包 log4j 核心包 ...
- kvm虚拟化学习笔记(四)之kvm虚拟机日常管理与配置
KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...
- 四 Hibernate的一级缓存&事务管理及其配置
持久态对象: 自动更新数据库,原理是一级缓存. 缓存:是一种优化的方式,将数据存入内存,从缓存/内存中获取,不用通过存储源 Hibernate框架中提供了优化手段:缓存,抓取策略 Hibernate中 ...
- Hibernate学习笔记(二)
2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...
- Hibernate学习笔记(一)
2016/4/18 19:58:58 Hibernate学习笔记(一) 1.Hibernate框架的概述: 就是一个持久层的ORM框架. ORM:对象关系映射.将Java中实体对象与关系型数据库中表建 ...
- Hibernate 学习笔记一
Hibernate 学习笔记一 今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子.期间碰 ...
- Hibernate学习笔记-Hibernate HQL查询
Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...
随机推荐
- 侏罗纪世界2百度云在线观看迅雷下载高清BT下载
原名:Jurassic World: Fallen Kingdom 地区:美国 语言:英语 首播:2018-06-15(中国大陆) / 2018-06-22(美国) 电视台: 类型:动作 / 科幻 / ...
- 64位Windows操作系统中的注冊表
x64系统上有x64.x86两种注冊表,记录下. 64 位Windows系统中的注冊表分为 32 位注冊表项和 64 位注冊表项.很多 32 位注冊表项与其对应的 64 位注冊表项同名. 在64位版本 ...
- [Android Pro] 开发一流Android SDK
cp from : https://blog.csdn.net/dd864140130/article/details/53558011 本篇文章已授权微信公众号 guolin_blog (郭霖)独家 ...
- linux文件去重工具findup, fslint-gui
findup, fslint-gui,图形化工具,直接使用
- CDR话单主要字段介绍
l Time of call connection RRC连接时的时间,格式:yyyy年mm月dd日hh时mm分ss秒 l Call Setup Time per sections 呼叫建立时长 ...
- 在Visual Studio 2013里使用 Microsoft SQL Server Compact Edition
(1)下载SQLCE组件 https://www.microsoft.com/en-us/download/details.aspx?id=17876 (2)下载VS2013工具设计器 https:/ ...
- Java 文件路径相关
不得不说Java的文件路径弄得很复杂, 有编译目录和resource目录什么的和解释型语言(PHP)的就是不一样 搞了好几年java一直没认真去研究这些个破路径怎么回事, 每次都忘记, 梳理一下备忘 ...
- MAT(Memory Analyzer Tool)内存分析工具的使用
开发.应用中老是会遇到OutOfMemory异常,而且常常是过一段时间内存才被吃光,这里可以利用java heap dump出jvm内存镜像,然后再对其进行分析来查找问题. 平常利用jmap -dum ...
- 京东的Netty实践,京麦TCP网关长连接容器架构
背景 早期京麦搭建 HTTP 和 TCP 长连接功能主要用于消息通知的推送,并未应用于 API 网关.随着逐步对 NIO 的深入学习和对 Netty 框架的了解,以及对系统通信稳定能力越来越高的要求, ...
- Java学习笔记——File类文件管理及IO读写、复制操作
File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图片 文件和文件夹 相关函数 (boolean) mkdir( ...