`
jianchen
  • 浏览: 340566 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

hibernate学习之第十五篇

阅读更多

事务与事务边界
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 API的深入理解,帮助开发者更高效地使用Hibernate进行数据库操作。 一、Hibernate概述 Hibernate是Java开发中广泛使用的ORM框架,它提供了一种在Java应用中持久化数据到关系数据库的...

    Hibernate 用法实例

    本篇内容将通过丰富的实例来深入探讨Hibernate的核心概念和技术,帮助读者从入门到精通,掌握其所有主要用法。** ### 一、Hibernate 概述 Hibernate 提供了一种在Java应用程序中管理关系数据库模型的机制。它通过...

    来自Java Persistence With Hibernate的示例

    本篇将深入探讨“Java Persistence with Hibernate”的核心概念,并通过具体的示例来帮助理解其工作原理和使用方法。 一、Hibernate简介 Hibernate是一个开源的Java库,它提供了在Java应用程序中与关系数据库进行...

    hibernate中文帮助文档

    这篇中文帮助文档旨在为开发者提供详尽的指南,加速他们对Hibernate的理解和应用。 一、Hibernate概述 Hibernate是一个强大的工具,它消除了Java应用程序与SQL之间的直接耦合,使得开发人员可以更专注于业务逻辑,...

    Hibernate API帮助文档

    这篇文档将深入探讨Hibernate API的各个方面,帮助开发者更好地理解和使用它。 一、Hibernate体系结构 Hibernate主要由以下组件构成: 1. Configuration:负责读取配置文件,建立SessionFactory。 2. ...

    Hibernate基础全攻略

    本篇攻略将深入探讨Hibernate的基础知识,帮助初学者理解并掌握其核心概念。 1. ** Hibernate简介** Hibernate是一个开源的ORM框架,它允许开发人员在Java应用中使用面向对象的方式来处理数据库。通过提供对象与...

    Hibernate入门(上)笔记.pdf.zip

    这篇笔记主要涵盖了Hibernate框架的基础知识,它是Java开发中用于对象关系映射(ORM)的热门工具。Hibernate允许开发者用Java对象来操作数据库,消除了传统的JDBC代码,提高了开发效率和代码的可维护性。 一、...

    Hibernate 中文API 入门和开发的好帮手

    这篇文档是Hibernate的中文API,为学习和使用Hibernate提供了一个直观且易于理解的参考。 一、Hibernate概述 Hibernate是Java领域中广泛使用的ORM框架,它将数据库的操作转换为对Java对象的操作,通过配置文件和...

    java web技术开发大全(最全最新)

    第15章 Struts 2对AJAX的支持 第16章 用Struts 2实现注册登录系统 第3篇 Hibernate篇 第17章 Hibernate的Helloworld程序 第18章 配置Hibernate 第19章 Hibernate的会话与O/R映射 第20章 Hibernate的查询与更新...

    java web开发技术大全

    第15章 Struts 2对AJAX的支持 第16章 用Struts 2实现注册登录系统 第3篇 Hibernate篇 第17章 Hibernate的Helloworld程序 第18章 配置Hibernate 第19章 Hibernate的会话与O/R映射 第20章 Hibernate的查询...

    Java Web开发实例大全

    第15章 Struts2框架标签应用 第16章 Hibernate框架基础 第17章 Hibernate高级话题 第18章 Spring框架基础 第19章 Spring的Web MVC框架 第6篇 网站安全与架构模式篇 第20章 网站性能优化与安全策略 第21章 设计模式与...

    Java Web开发实例大全(基础卷) 完整pdf扫描版[179MB]

    第15章 Struts2框架标签应用 第16章 Hibernate框架基础 第17章 Hibernate高级话题 第18章 Spring框架基础 第19章 Spring的Web MVC框架 第6篇 网站安全与架构模式篇 第20章 网站性能优化与安全策略 第21章 设计模式与...

    开源软件之道(中文高清版)

    第1篇 了解开源软件 第1章 开源软件概述 1.1 开源软件的理解 1.2 开源软件的定义 1.3 开源软件定义的意义 1.4 开源软件和其他类型软件的比较 第2章 开源软件的历史与未来 2.1 开源软件的历史 ...第15章 开创事业

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用...

    hiberante ref document

    本篇将基于提供的"hibernate ref document"进行深入解析,旨在帮助开发者更好地理解和应用Hibernate。 一、Hibernate概述 Hibernate是一种开放源代码的Java库,它允许开发人员在Java应用程序中使用面向对象的方式来...

    一些j2ee学习资料

    7. **J2EE教程第46-54篇** - 地址:http://www.ibeifeng.com/read.php?tid=1068&u=1007 - 继续深入探讨J2EE技术,包括高级主题和实践技巧。 8. **X系统SSH全套教程** - 地址:...

    JavaEE程序员必读图书大推荐参照.pdf

    JavaEE 程序员必读图书大推荐参照 ...15. 《jQuery 实践》:学习 jQuery 的必备参考书。 该指南涵盖了 JavaEE 程序员所需的多个方面的知识点,是 JavaEE 程序员提高技术水平和编程能力的必备参考书籍。

    快意编程 EXT JS Web开发技术详解.pdf

    第15章 封装Ext JS提高开发速度 262 第三篇 AJAX整合实践 第16章 Ext3+REST+Spring2+ Hibernate3整合方案 326 第17章 工时统计管理系统 392 本站提供的快意编程 EXT JS Web开发技术详解 PDF版[249.85M]资源来源...

    java软件开发——顶岗实习周记25篇.doc

    #### 第十三周至第二十五周:综合运用与成果展示 - **综合运用**:结合前几周所学知识和技术,综合应用于项目开发中。 - **成果展示**:将完成的项目或功能模块展示给团队成员或上级领导。 - **职业规划思考**:通过...

Global site tag (gtag.js) - Google Analytics