Spring事务,Hibernate事务,JTA,数据库事务,他们之间的关系谁能理清?是不是数据库不支持事务,Spring,hibernate,JTA全都无法实现事务?在我理解JTA的事务是依赖数据库级别的事务的。
spring,hibernate是依赖JTA的。

解决方案 »

  1.   

    对于事务我也是一头雾水,也发过贴子问。但也没人讲得清,呼唤高人!http://topic.csdn.net/u/20091009/16/a1274c49-8436-4b74-9925-807240167a78.html
      

  2.   

    Spring事务:对于传统的基于特定事务资源的事务处理而言(如基于JDBC的数据库访问),Spring并不会对其产生什么影响,我们照样可以成功编写并运行这样的代码。同时,Spring还提供了一些辅助类可供我们选择使用,这些辅助类简化了传统的数据库操作流程,在一定程度上节省了工作量,提高了编码效率。
      
      对于依赖容器的参数化事务管理而言,Spring则表现出了极大的价值。Spring本身也是一个容器,只是相对EJB容器而言,Spring显得更为轻便小巧。我们无需付出其他方面的代价,即可通过Spring实现基于容器的事务管理(本质上来讲,Spring的事务管理是基于动态AOP)。hibernate事务:hibernate是JDBC的轻量级对象封装,hibernate本身不具备Transaction处理功能,Hibernate的Transaction实际上是JDBC的Transaction封装或者JTATransaction的封装.具体分析如下:Hibernate Transaction可以配置JDBCTransaction或者JTATransaction这取决与你在Hibernate.properties中的配置spring事务介绍
    http://blog.csdn.net/gotohbu/archive/2009/07/08/4331964.aspx
      

  3.   

    我们所知道的事务一般是与数据连接 Connection 绑定的,这种称为普通事务,也就是 Spring, Hibernate 等支持的事务,低层采用的是 Connection 中的事务处理。假如有多个数据源,也就是说同时要操作多个 Connection 并且要纳入事务中时,普通的 Connection 事务就无能为力了,这时需要采用 JTA 的分布式事务。JTA 是 J2EE 中的一项技术规范。分布式事务一般指的是跨多个数据源,跨地域的数据源实现事务,这样的事务处理很复杂,需要纳入事务管理的数据源具有 2-PC 的能力(2-PC 是两阶段提交的简称),JTA 的分布式事务一般需要由 J2EE 容器进行总的调控和管理,在 J2SE 环境中很难实现,但借助于 jOTM 这个开源框架在 J2SE 环境中 Spring 也能处理 JTA 事务。
      

  4.   

    另外,JTA 不仅能处理数据库事务,而且还能处理 JMS 中的事务。
      

  5.   

    先要搞清楚事务transaction的概念。
    事务可以理解成原子,就是不可分割的。
    如果多个数据库操纵语句一起完成一个功能,那么就是一个事务。
    比如:转账功能,从A账户转100元到B账户,那么有2个操作,首先要到A账户扣100元,然后到B账户加100元。这2个动作必须都完成才行。如果只完成一半,账就不平了。现在我们用的关系式数据库基本上都支持事务的功能。
    JDBC支持事务,也是依赖于数据库的,connection.commit(),rollback()就是调用数据库的commit,rollback。
    很明显,HIBERNATE/SPRING的事务也是依赖JDBC的。SPRING的声明式事务,利用了AOP,在方法的起点切入事务的起点,在方法调用的终点切入事务的终点(提交),捕获异常中回滚事务。JTA是分布式事务,就是不同的数据库连接,比如刚才转账的例子,从招商银行A账户转100到光大银行的B账户。这就涉及到多数据库,也远远超越了数据库事务的概念。必须保证B账户收到了100,A账户才能扣100。
      

  6.   

    楼主提到的只有jdbc和JTA事务,  spring和hibernate对JDBC事物进行了封装。JDBC事务最终会反映成数据库系统的事务。
    JTA定义比较广泛,按照SUN的说法,实现了XAResource接口的对象都可以参与JTA事务,所有参与了JTA事务的资源由容器统一管理,容器指示各资源提交还是回滚。不管数据库也好,文件系统都有可能参与同一JTA事务
      

  7.   

    JTA支持分布式事务,它依赖于二次提交协议,每个库commit数据,此时并没有真正提交,而是通过第三方,在判断每个库都没出错误的情况下才会通知每个库真正的去提交事务
      

  8.   

    一头雾水,在spring里面加入事务管理,不知道调用的存储过程要不要加事务管理