`
一日一博
  • 浏览: 229983 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Hibernate4之事务机制

阅读更多
首先来认识以下J2EE常见的3种事务:
1、JDBC事务
JDBC事务是用Connection对象控制的。JDBC Connection接口(java.sql.Connection)提供了两种事务模式:自动提交和手工提交。
java.sql.Connection 提供了以下控制事务的方法:
public void setAutoCommit(boolean)
public boolean getAutoCommit()
public void commit()
public void rollback()
使用 JDBC 事务界定时,您可以将多个 SQL 语句结合到一个事务中。
JDBC 事务的一个缺点是事务的范围局限于一个数据库连接。一个 JDBC 事务不能跨越多个数据库。

2、JTA(Java Transaction API)事务
JTA是一种高层的,与实现无关的,与协议无关的API,应用程序和应用服务器可以使用JTA来访问事务。
JTA允许应用程序执行分布式事务处理--在两个或多个网络计算机资源上访问并且更新数据,这些数据可以分布在多个数据库上。JDBC驱动程序的JTA支持极大地增强了数据访问能力。
如果计划用 JTA 界定事务,那么就需要有一个实现 javax.sql.XADataSource 、 javax.sql.XAConnection 和 javax.sql.XAResource 接口的 JDBC 驱动程序。一个实现了这些接口的驱动程序将可以参与 JTA 事务。一个 XADataSource 对象就是一个 XAConnection 对象的工厂。 XAConnection s 是参与 JTA 事务的 JDBC 连接。
您将需要用应用服务器的管理工具设置 XADataSource 。从应用服务器和 JDBC 驱动程序的文档中可以了解到相关的指导。
J2EE 应用程序用 JNDI 查询数据源。一旦应用程序找到了数据源对象,它就调用 javax.sql.DataSource.getConnection() 以获得到数据库的连接。
XA 连接与非 XA 连接不同。一定要记住 XA 连接参与了 JTA 事务。这意味着 XA 连接不支持 JDBC 的自动提交功能。同时,应用程序一定不要对 XA 连接调用 java.sql.Connection.commit() 或者 java.sql.Connection.rollback() 。相反,应用程序应该使用 UserTransaction.begin()、 UserTransaction.commit() 和 serTransaction.rollback() 。
Tomcat是不支持JTA的,除非有第三方插件或者用spring
支持JTA事务的基本都是应用服务器,像weblogic和Jboss

3、容器事务
容器事务主要是J2EE应用服务器提供的,容器事务大多是基于JTA完成,这是一个基于JNDI的,相当复杂的API实现。相对编码实现JTA 事务管理,我们可以通过EJB容器提供的容器事务管理机制(CMT)完成同一个功能,这项功能由J2EE应用服务器提供。这使得我们可以简单的指定将哪个方法加入事务,一旦指定,容器将负责事务管理任务。这是我们土建的解决方式,因为通过这种方式我们可以将事务代码排除在逻辑编码之外,同时将所有困难交给 J2EE容器去解决。使用EJB CMT的另外一个好处就是程序员无需关心JTA API的编码,不过,理论上我们必须使用EJB。

三种事务差异:
  • JDBC事务控制的局限性在一个数据库连接内,但是其使用简单。
  • JTA事务的功能强大,事务可以跨越多个数据库或多个DAO,使用也比较复杂。
  • 容器事务,主要指的是J2EE应用服务器提供的事务管理,局限于EJB应用使用。


Hibernate事务管理机制:是JDBC的轻量封装,在事务管理层将其委托给底层的JDBC或JTA,以实现事务的管理和调度。默认事务处理机制基于JDBC Transaction。也可通过配置文件指定:

<hibernate-configuration>
<session-factory>
    <property name=”hibernate.transaction.factory_class”>
       net.sf.hibernate.transaction.JTATransactionFactory
    </property>
</session-factory>
</hibernate-configuration>

JTA与JDBC最大的区别是提供了跨session的事务管理能力。JTA事务管理由JTA容器实现,对当前加入事务的众多connection进行调度,实现事务性要求。

Hibernate的JDBCTransaction其实就是JDBC的conn.commit封装,只不过在Hibernate中,Session打开的时候,就会自动conn.setAutoCommit(false),不像一般的JDBC,默认都是true,所以你最后不写 commit也没有关系,由于Hibernate已经把AutoCommit给关掉了,所以用Hibernate的时候,你在程序中不写 Transaction的话,数据库根本就没有反应。
分享到:
评论

相关推荐

    详解Hibernate事务处理机制

    ### 详解Hibernate事务处理机制 #### 一、引言 Hibernate作为一款优秀的对象关系映射(ORM)框架,在Java开发领域扮演着极其重要的角色。它不仅简化了数据持久化的复杂性,还提供了一系列强大的功能来支持高效的...

    hibernate事务管理机制.doc

    【hibernate事务管理机制】是指在使用Hibernate框架进行数据库操作时,如何管理和协调事务的一系列规则和策略。事务管理是确保数据一致性、完整性和并发控制的重要机制。 **悲观锁**是预防性的锁定策略,它假设并发...

    Hibernate的事务处理机制和flush方法的用法.docx

    在本文中,我们将深入探讨Hibernate的事务处理机制以及`flush`方法的用法,并分析为何在某些场景下会出现特定的异常。 首先,我们需要了解Hibernate中的事务处理。在Java应用中,事务通常与SessionFactory和Session...

    Hibernate4实战 之第五部分:Hibernate的事务和并发

    #### 二、Hibernate事务管理机制 Hibernate 本身不实现事务逻辑,而是依赖于底层的数据源(JDBC 或 JTA)来实现事务管理。这意味着,当你使用 Hibernate 进行数据操作时,所涉及的事务要么基于 JDBC 的事务管理,要么...

    Could not roll back Hibernate transaction.doc

    本文详细介绍了Hibernate事务回滚失败的问题原因和解决方法,并对Hibernate的事务管理机制和事务回滚机制进行了详细说明。开发人员在使用Hibernate时,应该遵循Hibernate提供的API和事务管理机制,以确保数据库的...

    day36 09-Hibernate中的事务:事务处理

    **一、Hibernate事务的概念** 事务是一组数据库操作,这些操作被视为一个逻辑单元,要么全部执行,要么全部不执行。这是为了保证数据的一致性。在Hibernate中,事务管理通常通过SessionFactory和Session接口来实现。...

    hibernate缓存和事务

    Hibernate 提供了两级缓存机制:第一级缓存和第二级缓存。 1. **第一级缓存**:这是SessionFactory级别的缓存,每个SessionFactory实例都有自己的第一级缓存。当对象被持久化或者从数据库加载时,它们会被放入第一...

    Hibernate4 必备包

    Hibernate4 提供了一种机制,将Java类映射到数据库表,使得开发者可以使用面向对象的方式来操作数据,而无需直接编写SQL语句。ORM简化了数据库操作,提高了代码可读性和可维护性。 2. **配置文件(hibernate.cfg....

    spring hibernate 事务管理学习笔记(一)

    同时,Spring的事务管理机制是其核心功能之一,支持编程式和声明式两种方式,使得开发者可以方便地控制事务的边界。 其次,Hibernate是Java领域最流行的ORM(Object-Relational Mapping)框架,它简化了数据库操作...

    day36 11-Hibernate中的事务:当前线程中的session

    本文将深入探讨Hibernate中的事务处理,特别是“当前线程中的Session”这一概念,以及如何在实际开发中有效地利用它。 在Hibernate中,Session是与持久化层交互的主要接口,它负责对象的持久化、检索、更新和删除等...

    spring mvc+hibernate 实现事务管理(全注解版)

    2. **Hibernate事务**: Hibernate本身也提供了一种事务管理机制,但在Spring环境中,我们通常使用Spring的事务管理器来协调。当@Transactional注解应用于方法上,Spring会在该方法执行前后自动管理事务的开始和结束...

    Hibernate 4jar包

    此外,事务管理也是Hibernate的重要组成部分,它可以与JTA(Java Transaction API)或JDBC事务进行集成。 总的来说,Hibernate 4jar包为Java开发者提供了一个强大且全面的工具集,以简化数据库操作,提高开发效率,...

    day36 10-Hibernate中的事务:解决丢失更新

    标题中的“day36 10-Hibernate中的事务:解决丢失更新”指的是在...通过理解并熟练运用Hibernate提供的事务控制机制、乐观锁和悲观锁等工具,开发者可以有效地避免丢失更新和其他并发问题,确保应用程序的数据完整性。

    Hibernate缓存与spring事务详解

    本篇文章将深入探讨Hibernate的缓存机制和Spring的事务管理,以帮助开发者更好地理解和利用这两个强大的工具。 **一、Hibernate缓存** 1. **第一级缓存:Session缓存** - Hibernate的每个Session都有一个内置的...

    spring hibernate atomikos 分布式事务

    4. 使用`@Transactional`注解或者在XML配置中定义事务行为,声明哪些方法应该在一个事务内执行。 在实际应用中,Atomikos能够处理复杂的分布式事务场景,如两阶段提交(2PC),以保证ACID(原子性、一致性、隔离性...

    Hibernate中,利用版本管理机制来控制事务并发

    在Java的持久化框架Hibernate中,版本管理机制是实现事务并发控制的重要手段。它通过维护对象的版本信息,确保在多线程环境下数据的一致性和完整性。本文将深入探讨Hibernate中的版本管理机制及其在控制事务并发中的...

    Spring4+Hibernate4+SpringMvc

    Hibernate4还提供了缓存机制、多态支持以及丰富的查询API,使得数据库操作更加便捷和高效。 SpringMvc是Spring框架的一个模块,专门用于Web应用的开发。它遵循Model-View-Controller设计模式,将业务逻辑、数据和...

    HIBERNATE的缓存机制

    Hibernate缓存机制是提高应用程序性能的关键特性,尤其是在频繁与数据库交互的应用中。缓存通过减少对物理数据库的直接访问次数,显著提升了数据读取和写入的速度。这主要是因为从缓存中读取数据比从数据库中获取更...

    java私塾独家首发最新Hibernate4教程

    ### Hibernate4核心知识点详解 #### 一、Hibernate4简介与入门 **1.1 Hibernate4概述** Hibernate4是一款开源的对象关系映射(Object Relational Mapping, ORM)框架,它简化了Java应用程序与数据库之间的交互...

    hibernate4全部架包

    1. **对象关系映射(ORM)**: Hibernate 4是ORM工具的代表之一,它允许开发者用面向对象的方式来处理数据库操作,通过映射Java类到数据库表,使得数据操作如同操作普通对象一样简单。 2. **配置文件**: Hibernate 4...

Global site tag (gtag.js) - Google Analytics