`

hibernate中事物的管理

阅读更多

在Hibernate中使用JDBC事务
Hibernate对JDBC进行了轻量级的封装,它本身在设计时并不具备事务处理功能。Hibernate将底层的JDBCTransaction或JTATransaction进行了封装,再在外面套上Transaction和Session的外壳,其实是通过委托底层的JDBC或JTA来实现事务的处理功能的。

要在Hibernate中使用事务,可以在它的配置文件中指定使用JDBCTransaction或者JTATransaction。在hibernate.properties中,查找“transaction.factory_class”关键字,得到以下配置:

# hibernate.transaction.factory_class  org.hibernate.transaction.JTATransactionFactory# hibernate.transaction.factory_class  org.hibernate.transaction.JDBCTransactionFactory
 

Hibernate的事务工厂类可以设置成JDBCTransactionFactory或者JTATransactionFactory。如果不进行配置,Hibernate就会认为系统使用的事务是JDBC事务。

在JDBC的提交模式(commit mode)中,如果数据库连接是自动提交模式(auto commit mode),那么在每一条SQL语句执行后事务都将被提交,提交后如果还有任务,那么一个新的事务又开始了。

Hibernate在Session控制下,在取得数据库连接后,就立刻取消自动提交模式,即Hibernate在一个执行Session的beginTransaction()方法后,就自动调用JDBC层的setAutoCommit(false)。如果想自己提供数据库连接并使用自己的SQL语句,为了实现事务,那么一开始就要把自动提交关掉(setAutoCommit(false)),并在事务结束时提交事务。

使用JDBC事务是进行事务管理最简单的实现方式,Hibernate对于JDBC事务的封装也很简单。下面是一个在Hibernate中使用JDBC事务的例子:

try {Session session = HibernateUtil.currentSession();Transaction tx = session.beginTransaction();  //在默认情况下,开启一个JDBC事物for(int i=0; i<10; i++)  {Student stu = new Student();stu.setName("Student" + i);session.save(stu);}tx.commit(); //提交事务session.close();} catch(Exception e) {…tx.rollback();   //事务回滚}
在Hibernate中使用JTA事务
JTA(Java Transaction API)是事务服务的J2EE解决方案。本质上,它是描述事务接口的J2EE模型的一部分,开发人员直接使用该接口或者通过J2EE容器使用该接口来确保业务逻辑能够可靠地运行。

JTA有3个接口,它们分别是UserTransaction接口、TransactionManager接口和Transaction接口。这些接口共享公共的事物操作,例如commit()和rollback(),但也包含特殊的事务操作,例如suspend()、resume()和enlist(),它们只出现在特定的接口上,以便在实现中允许一定程度的访问控制。

在一个具有多个数据库的系统中,可能一个程序会调用几个数据库中的数据,需要一种分布式事务,或者准备用JTA来管理跨Session的长事务,那么就需要使用JTA事务。下面介绍如何在Hibernate的配置文件中配置JTA事务。在hibernate.properties文件中设置如下(把JTATransactionFactory所在的配置行的注释符“#”取消掉):

hibernate.transaction.factory_class  org.hibernate.transaction.JTATransactionFactory# hibernate.transaction.factory_class  org.hibernate.transaction.JDBCTransactionFactory
 
或者在hibernate.cfg.xml文件中配置如下:
<session-factory>…..<property name=” hibernate.transaction.factory_class”>org.hibernate.transaction.JTATransactionFactory</property>……</session-factory>
下面是一个应用JTA事务的例子:
javax.transaction.UserTransaction tx = null;tx = new initialContext().lookup(” javax.transaction.UserTransaction ”) ;tx.begin();Session s1 = sf.openSession();……s1.flush();  s1.close();Session s2 = sf.openSession();……s2.flush();  s2.close();tx.commit();
 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gancheng/archive/2008/12/14/3514506.aspx

分享到:
评论

相关推荐

    hibernate事务管理机制.doc

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

    spring mvc+hibernate实现事务管理(配置文件版)

    总结,本项目展示了如何在Spring MVC和Hibernate环境中实现事务管理,通过MyEclipse自动生成的包和配置文件,简化了开发流程。在实际应用中,这样的整合能够提供高效且易于维护的Web应用,同时,声明式事务管理极大...

    在Spring中配置Hibernate事务

    在Spring框架中集成和配置Hibernate事务管理是企业级Java应用中的常见实践,它能提供高效且灵活的事务处理策略。Spring作为一款强大的依赖注入(DI)和面向切面编程(AOP)容器,能够轻松地管理和协调不同数据访问...

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

    在本篇“Spring Hibernate 事务管理学习笔记(二)”中,我们将深入探讨Spring框架与Hibernate集成时如何实现高效、安全的事务管理。这是一篇关于源码分析和技术工具使用的文章,适合对Java开发和数据库操作有基础...

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

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

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

    在Hibernate中,事务管理通常通过SessionFactory和Session接口来实现。 **二、SessionFactory与Session** SessionFactory是Hibernate的核心组件,它负责创建Session对象。Session对象则相当于JDBC中的Connection,...

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

    在学习过程中,阅读博客如《spring hibernate 事务管理学习笔记(一)》是非常有益的,它通常会包含具体的示例代码和实践建议。你可以参考这个博客链接(https://microjava.iteye.com/blog/525973),结合实际项目,...

    Hibernate的事务管理.doc

    本文将详细探讨Hibernate中的事务管理机制及其应用。 【正文】: 1. 事务的四大特性(ACID) - 原子性(Atomicity):事务中的所有操作被视为一个不可分割的单元,要么全部成功,要么全部失败。如果事务中的某...

    spring mvc+hibernate实现的用户管理系统

    5. Spring和Hibernate的整合:学习如何将Spring的事务管理、依赖注入等特性与Hibernate的持久化能力结合起来。 6. 数据库的设计:在设计用户管理系统时,需要设计数据库表结构,并根据业务需求选择合适的主键生成...

    详解Hibernate事务处理机制

    - **JTA事务管理**:更高级的一种事务管理模式,用于分布式环境中多个资源管理器之间的事务协调。这种方式通常与EJB容器一起使用。通过配置`hibernate.transaction.factory_class`为`...

    Hibernate事务(源码)

    本篇文章将深入探讨Hibernate中的事务管理,包括其核心概念、事务的隔离级别、事务的提交与回滚以及源码分析。 ### 1. 事务核心概念 事务是数据库操作的基本单位,它保证了一组操作的原子性、一致性、隔离性和持久...

    Spring+Hibernate注解事务实例

    本实例将深入探讨如何结合Spring的注解声明式事务管理与Hibernate的数据访问技术,构建一个完整的事务处理系统。 Spring框架以其灵活的依赖注入(DI)和面向切面编程(AOP)闻名,它允许开发者将事务管理从业务逻辑...

    hibernate中文参考手册

    事务管理在Hibernate中至关重要,它可以确保在发生错误时回滚已执行的数据库操作。Hibernate支持编程式事务管理和声明式事务管理,前者通过Session的beginTransaction()、commit()和rollback()方法进行控制,后者则...

    Spring Hibernate事务实例

    3. AOP(面向切面编程)在事务管理中的应用:`TransactionInterceptor`基于AOP拦截方法调用,处理事务。 4. 配置事务规则:通过XML配置文件定义事务的开始、提交和回滚条件。 5. 事务传播属性:理解`REQUIRED`、`...

    Hibernate人力资源管理系统

    Hibernate支持编程式和声明式事务管理,通过Transaction接口或@Transactional注解,可以确保数据的一致性和完整性。在人力资源管理系统中,涉及到工资调整、职位变动等操作时,需要确保这些事务的原子性,防止因异常...

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

    编程式事务管理需要在代码中显式地开启、提交或回滚事务,而声明式事务管理则通过配置来指定事务边界。 “当前线程中的Session”这一概念指的是,为每个线程绑定一个单独的Session实例,这样可以更好地管理事务,...

    Hibernate 事务和并发控制

    首先,我们来理解Hibernate中的事务管理。在数据库操作中,事务是保证数据一致性的重要手段。一个事务包含了一组数据库操作,这些操作要么全部成功,要么全部回滚。在Hibernate中,事务可以通过编程式或声明式的方式...

    spring3+hibernate4配置声明式事务管理(annotation方式)

    本实例工程展示了如何在Spring 3和Hibernate 4中使用注解进行声明式事务管理,这是一种高效且易于维护的方法。接下来,我们将详细讨论相关知识点。 1. **Spring框架**:Spring是一个全面的后端开发框架,它提供了...

    hibernate事务,并发及缓存管理实例

    一、Hibernate事务管理 在数据库操作中,事务确保了数据的一致性和完整性。Hibernate提供了四种事务隔离级别:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化...

Global site tag (gtag.js) - Google Analytics