事务与事务边界
hibernate实际上使用jdbc实现事务管理,这种事务只能用于一个数据库。
tx = session.beginTransaction();这句代码内部实际就是connection.setAutoCommit(false);的操作。
Hibernate是JDBC的轻量级封装,本身并不具备事务管理能力。在事务管理层,Hibernate将其委托给底层的JDBC或者JTA,以实现事务的管理和调度。
事务的边界指开始事务,事务提交,事务回滚的位置。
一般我们对事务的操作只针对一个数据库。但是在现实生活中,我们也可能会涉及到跨数据库的事务处理。这样就会带来一些问题,假如我们有5个数据库,现在要对这五个数据库进行一次事务,对其中任何的一个数据库操作出现问题需要回滚,那么如何通知其他几个数据库也进行回滚呢?
JTATansaction帮我们解决了这一问题。它可以简单的理解成跨数据库的事务,需要有一个JTA容器实现,JTA容器的角色就相当于一个通知者,能够有效地对多数据库进行事务协调。使用JTATransaction需要配置hibernate.transaction.factory_class参数,该参数缺省值是org.hibernate.transaction.JDBCTransactionFactory,当使用JTATransaction时需要将参数改成org.hibernate.transaction.JTATransactionFactory,并配置jta.UserTransaction参数JNDI名(Hibernate在启动JTATransaction时要用该值到JNDI的上下文Context中去找javax.transaction.UserTransaction).
javax.transaction.UserTransaction tx = context.lookup("jndiName");
try{
tx.begin();
//多个数据库的session操作;
session1...
session2...
session3...
tx.commit();
}catch(Exception e){
tx.rollback();throw e;
}
使用了JTA事务管理,就不需要在session上再使用事务了。
还有,我们的事务应该放在三层架构中的哪一层呢?
由于事务的控制是与我们的实际业务逻辑相关的,比如我们转账需要回滚,所以事务控制应该位于业务逻辑层。但是又有一个问题了,我们使用的事务控制却要依赖于数据访问层,就比如我们使用的Transaction对象是数据访问层的对象,业务逻辑层出现数据访问层的代码,这样就会导致业务逻辑层和数据访问层耦合在一起。要想解决这一问题,要依赖框架,否则很难办到解耦。ejb可以做到在业务逻辑层不出现数据访问层的内容,但又能控制事务在业务逻辑层。ejb的这一设计在当时满足了用户的需要,不过后来人们发现ejb的实现上很复杂,导致spring这一轻量级的框架赢得了开发者的青睐,spring也能够实现同样的功能。
sessionFactory.openSession()中,Hibernate会初始化数据库连接,与此同时,将其AutoCommit设为关闭状态(false)。而其后,在session.beginTransaction方法中,Hibernate会再次确认Connection的AutoCommit属性被设为关闭状态(为了防止用户代码对session的Connection.autoCommit属性进行修改).
分享到:
相关推荐
这篇文档旨在提供对Hibernate API的深入理解,帮助开发者更高效地使用Hibernate进行数据库操作。 一、Hibernate概述 Hibernate是Java开发中广泛使用的ORM框架,它提供了一种在Java应用中持久化数据到关系数据库的...
本篇内容将通过丰富的实例来深入探讨Hibernate的核心概念和技术,帮助读者从入门到精通,掌握其所有主要用法。** ### 一、Hibernate 概述 Hibernate 提供了一种在Java应用程序中管理关系数据库模型的机制。它通过...
本篇将深入探讨“Java Persistence with Hibernate”的核心概念,并通过具体的示例来帮助理解其工作原理和使用方法。 一、Hibernate简介 Hibernate是一个开源的Java库,它提供了在Java应用程序中与关系数据库进行...
这篇中文帮助文档旨在为开发者提供详尽的指南,加速他们对Hibernate的理解和应用。 一、Hibernate概述 Hibernate是一个强大的工具,它消除了Java应用程序与SQL之间的直接耦合,使得开发人员可以更专注于业务逻辑,...
这篇文档将深入探讨Hibernate API的各个方面,帮助开发者更好地理解和使用它。 一、Hibernate体系结构 Hibernate主要由以下组件构成: 1. Configuration:负责读取配置文件,建立SessionFactory。 2. ...
本篇攻略将深入探讨Hibernate的基础知识,帮助初学者理解并掌握其核心概念。 1. ** Hibernate简介** Hibernate是一个开源的ORM框架,它允许开发人员在Java应用中使用面向对象的方式来处理数据库。通过提供对象与...
这篇笔记主要涵盖了Hibernate框架的基础知识,它是Java开发中用于对象关系映射(ORM)的热门工具。Hibernate允许开发者用Java对象来操作数据库,消除了传统的JDBC代码,提高了开发效率和代码的可维护性。 一、...
这篇文档是Hibernate的中文API,为学习和使用Hibernate提供了一个直观且易于理解的参考。 一、Hibernate概述 Hibernate是Java领域中广泛使用的ORM框架,它将数据库的操作转换为对Java对象的操作,通过配置文件和...
第15章 Struts 2对AJAX的支持 第16章 用Struts 2实现注册登录系统 第3篇 Hibernate篇 第17章 Hibernate的Helloworld程序 第18章 配置Hibernate 第19章 Hibernate的会话与O/R映射 第20章 Hibernate的查询与更新...
第15章 Struts 2对AJAX的支持 第16章 用Struts 2实现注册登录系统 第3篇 Hibernate篇 第17章 Hibernate的Helloworld程序 第18章 配置Hibernate 第19章 Hibernate的会话与O/R映射 第20章 Hibernate的查询...
第15章 Struts2框架标签应用 第16章 Hibernate框架基础 第17章 Hibernate高级话题 第18章 Spring框架基础 第19章 Spring的Web MVC框架 第6篇 网站安全与架构模式篇 第20章 网站性能优化与安全策略 第21章 设计模式与...
第15章 Struts2框架标签应用 第16章 Hibernate框架基础 第17章 Hibernate高级话题 第18章 Spring框架基础 第19章 Spring的Web MVC框架 第6篇 网站安全与架构模式篇 第20章 网站性能优化与安全策略 第21章 设计模式与...
第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用...
本篇将基于提供的"hibernate ref document"进行深入解析,旨在帮助开发者更好地理解和应用Hibernate。 一、Hibernate概述 Hibernate是一种开放源代码的Java库,它允许开发人员在Java应用程序中使用面向对象的方式来...
7. **J2EE教程第46-54篇** - 地址:http://www.ibeifeng.com/read.php?tid=1068&u=1007 - 继续深入探讨J2EE技术,包括高级主题和实践技巧。 8. **X系统SSH全套教程** - 地址:...
JavaEE 程序员必读图书大推荐参照 ...15. 《jQuery 实践》:学习 jQuery 的必备参考书。 该指南涵盖了 JavaEE 程序员所需的多个方面的知识点,是 JavaEE 程序员提高技术水平和编程能力的必备参考书籍。
第15章 封装Ext JS提高开发速度 262 第三篇 AJAX整合实践 第16章 Ext3+REST+Spring2+ Hibernate3整合方案 326 第17章 工时统计管理系统 392 本站提供的快意编程 EXT JS Web开发技术详解 PDF版[249.85M]资源来源...
#### 第十三周至第二十五周:综合运用与成果展示 - **综合运用**:结合前几周所学知识和技术,综合应用于项目开发中。 - **成果展示**:将完成的项目或功能模块展示给团队成员或上级领导。 - **职业规划思考**:通过...
### MyEclipse开发手册之Java篇 #### 一、概览与目标读者 《MyEclipse开发手册之Java篇》是一本专为Java EE开发者设计的实用指南,它旨在帮助开发者掌握MyEclipse这一强大的集成开发环境(IDE),并利用其进行高效...