JTA与Hibernate事务

Hibernate是JDBC的轻量级封装,本身并不具备事务管理能力,在事务管理层,Hibernate将其委托给底层的JDBC或者JTA,以实现事务的管理和调度。

Hibernate的默认事务处理机制基于JDBCTransaction,也可以通过配置文件设定采用JTA作为事务管理实现:

<hibernate-configuration>

<session-factory>

……

<property name = "hibernate.transaction.factory_class">

net.sf.hibernate.transaction.JTATransactionFactory

</session-factory>

</hibernate-configuration>

1、基于JDBC的事务管理

Hibernate对于JDBC事务的封装非常简单。例如:

session=sessionFactory.openSession();

Transaction tx= session.beginTransaction();

……

tx.commit();

这里要注意的是,在sessionFactory.openSession()中,Hibernate会初始化数据库连接,与此同时,将其 AutoCommit设为关闭状态,这就是说,从SessionFactory获得session,其自动提交属性就已经被关闭了,下面的代码不会对事务性数据库产生任何效果。

session=sessionFactory.openSession();

session.save(user);

session.close();

如果要使得代码真正作用到数据库,必须显示的调用Transaction指令

session=sessionFactory.openSession();

Transaction tx = session.beginTransaction();

session.save(user);

tx.commit();

session.close();

2、基于JTA的事务管理

JTA提供了跨Session的事务管理能力,这是与JDBCTransaction最大的差异。

JDBC 事务由Connection管理,也就是说,事务管理实际上是在JDBC Connection中实现,事务周期限于Connection的生命周期之内,对于基于JDBC Transaction的Hibernate事务管理机制,事务管理在Session所依托的JDBC Connection中实现,事务周期限于Session的生命周期。

JTA事务管理由JTA容器实现,JTA容器对当前加入事务的众多Connection进行调度,实现其事务性要求,JTA的事务周期可横跨多个JDBC Connection生命周期,同样,对基于JTA事务的Hibernate,JTA事务横跨多个Session。需要注意的是,参与JTA事务的 Connection需避免对事务管理进行干涉,如果采用JTA Transaction,就不应该再调用Hibernate的Transaction功能。

时间: 2024-10-05 09:51:58

JTA与Hibernate事务的相关文章

Java事务处理全解析(八)——分布式事务入门例子(Spring+JTA+Atomikos+Hibernate+JMS)

在本系列先前的文章中,我们主要讲解了JDBC对本地事务的处理,本篇文章将讲到一个分布式事务的例子. 请通过以下方式下载github源代码: git clone https://github.com/davenkin/jta-atomikos-hibernate-activemq.git 本地事务和分布式事务的区别在于:本地事务只用于处理单一数据源事务(比如单个数据库),分布式事务可以处理多种异构的数据源,比如某个业务操作中同时包含了JDBC和JMS或者某个操作需要访问多个不同的数据库. Java

Hibernate事务管理

Hibernate 是JDBC 的轻量级封装,本身并不具备事务管理能力.在事务管理层, Hibernate将其委托给底层的JDBC或者JTA,以实现事务管理和调度功能.      Hibernate的默认事务处理机制基于JDBC Transaction.我们也可以通过配置文件设定采用JTA作为事务管理实现: <hibernate-configuration>          <session-factory>                   ……               

Hibernate事务和并发控制

Hibernate事务和并发控制 ++YONG原创,转载请注明 1.    事务介绍: 1.1.       事务的定义: 事务就是指作为单个逻辑工作单元执行的一组数据操作,这些操作要么必须全部成功,要么必须全部失败,以保证数据的一致性和完整性. 1.2.       事务具有ACID属性: o  原子性(Atomic):事务由一个或多个行为绑在一起组成,好像是一个单独的工作单元.原子性确保在事务中的所有操作要么都发生,要么都不发生. o  一致性(Consistent):一旦一个事务结束了(不

第十二节:Hibernate 事务隔离,对象状态

瞬时态:当new一个实体对象后,这个对象处于瞬时态,即这个对象只是一个保存临时数据的内存区域,如果没有变量引用这个对象,则会被JVM的垃圾回收机制回收.这个对象所保存的数据与数据库没有任何关系,除非通过Session的save().saveOrUpdate().persist().merge()方法把瞬时态对象与数据库关联,并把数据插入或者更新到数据库,这个对象才转换为持久态对象. 持久态:持久态对象的实例在数据库中有对应的记录,并拥有一个持久化标识(ID).对持久态对象进行delete操作后,

Hibernate事务

Hibernate事务控制    在实际生产中,每个业务逻辑都是由一系列对数据库访问完成的,这一系列的数据访问可能包括删除一些数据,然后再插入一些数据,这里的删除和插入的动作不可分割,要么全部执行,要么都不执行,这就需要事务. 事务具备4个特性:原子性(Atomicity),一致性(Consistency),隔离性(Isolation)和持续性(Durability)        从编程角度来看,Hibernate事务是由Session对象开启的:但是从底层的实现来看,Hibernate事务由

Spring+hibernate事务配置

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:task="http://www.springframework.org/schema/task"    xmlns:xsi="http://www.w3.org/2001/XMLSchem

Hibernate事务代码规范写法

----------------siwuxie095 事务相关概念 1.什么是事务 逻辑上的一组操作,构成这组操作的各个单元,要么一起成功, 要么一起失败 2.事务的四个特性 1)原子性 2)一致性 3)隔离性 4)持久性 3.不考虑隔离性,产生的问题 1)脏读 2)不可重复读 3)幻读(也称 虚读) 4.设置事务隔离级别,即可解决不考虑隔离性所产生的问题 「MySQL 默认的隔离级别:Repeatable Read(可重复读)」 5.Hibernate 也可以在核心配置文件中配置事务隔离级别

spring hibernate 事务整合 使用测试类 事务不自动提交的问题!!!

使用JUnit 测试hibernate 事务管理的时候应注意 ,测试类完成是默认回滚的. 所以只能查询数据库却不能增删改数据库. 应该在测试类上面加上注解 @Rollback(false)  表似默认不回滚. package TestHibernate; import java.util.List; import javax.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; import or

Hibernate 事务提交和事务回滚

Hibernate 事务提交和事务回滚 最近在用做hibernate做项目,一直不明白session.beginTransaction().commit() 和 session.beginTransaction().rollback(); 有什么区别 一组业务整体处理的行为叫一个事务.这一组的业务都能成功处理,我们就可以把这个事务提交来保存你已做的行为结果.但如果一组中有任何的差错出现的话,我们就认为这事务不成功,需要回滚来撤消之前的操作.举例:你去银行转账,转账我们有两步吧,从你账户中取出钱再