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

Hibernate 对事务的支持

阅读更多

我们这里只讨论Hibernate 对事务的支持,注意没有涉及到Spring 跟Hibernate 集成这个问题将放到以后再讨论。

 

在Hibernate 里面也定义了一个接口 Transaction public void begin() throws HibernateException;

public interface Transaction {	
	public void begin() throws HibernateException;
	public void commit() throws HibernateException;
	public void rollback() throws HibernateException;
	public boolean wasRolledBack() throws HibernateException;
	public boolean wasCommitted() throws HibernateException;
	public boolean isActive() throws HibernateException;
	public void registerSynchronization(Synchronization synchronization) 
	public void setTimeout(int seconds);
}

 
这里面最重要的有 begin, commit and rollback 几个方法。

有聊这个接口Hibernate 对事务应用的最常见idiom 是 :

Session sess = factory.openSession();
   Transaction tx;
   try {
       tx = sess.beginTransaction();
       //do some work
       ...
       tx.commit();
   }
   catch (Exception e) {
       if (tx!=null) tx.rollback();
       throw e;
   }
   finally {
       sess.close();
   }
 
这个Session 的实现类是SessionImpl, 在SessionImpl.beginTransaction() 方法中
几个的思路就是根据 configruation 信息 获取到Transaction, 然后调用transaction.begin() 方法。


Hibernate 里面的Transaction 有两个最常见的实现JTATransaction,  JDBCTransaction。 根据配置信息的不一样, beginTransaction得到就是这两个类得不同实例。   在实现这两个类得时候, Hibernate 还有个这个Session需要处理。 这个Session里面managed bean 需要flush, 通常在 这个 commit 方法要先调用 manageFlush 来强制cache 中的状态同步到数据库。


JTATransaction 实现的思路 技术上是begin() 的时候 通过jndi 找到 UserTransaction, 这个UserTransaction 开始就意味着global transaction 开始了。 同时利用JTA 事务的Syncronization 机制注册个 CacheSynchronization。 这个 CacheSynchronization 会在 JTA 事务 开始提交前 和提交后 分别 flush 和 close

JTATransaction  的 commit 方法 差不多是  先 managedFlush , 然后 UserTransaction.commit


JDBCTransaction 的事务的思路呢 begin 时 得到 那个jdbc connection, 修改它的 AutoCommit 成 false 就意味着 jdbc 事务开始了.

commit 的时候呢 同样也要先 Session flush, 然后找到那个 connection 去 commit(),  完了如果有必要恢复 AutoCommit 成 true 的话就 reset 回去。 


这里只是简单介绍Hibernate 对事务的处理, 至于Spring 对事务的处理在以后的文章中会提到。 

分享到:
评论

相关推荐

    spring 结合druid和hibernate使用jta配置分布式事务

    atomikos实现多数据源支持分布式事务管理(spring、tomcat、JTA) 结合spring 和durid进行配置,

    spring2.5+Hibernate3.3五种声明式事务处理 + 所需Jar

    spring2.5 + hibernate3.3 声明式事务 和所需jar包,spring2.5 + hibernate3.3 声明式事务 和所需jar包,spring2.5 + hibernate3.3 声明式事务 和所需jar包,

    Hibernate+中文文档

    3.6. Hibernate事务属性 3.7. 其他属性 3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 3.10. JTA TransactionManagers 9.1. 继承映射特性(Features of inheritance mappings) 16.1. ...

    在Spring中集成Hibernate事务

    一个组件一般会受到一个或多个存储数据的支持,因此当我们提到集成一个或多个组件的时候,我们就认为需要跨越多个组件、维护多个数据存储中的原子操作。J2EE服务器为这些组件提供了一个容器,这个容器可以管理这些...

    hibernate3.2中文文档(chm格式)

    3.6. Hibernate事务属性 3.7. 其他属性 3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 3.10. JTA TransactionManagers 9.1. 继承映射特性(Features of inheritance mappings) 16.1. ...

    HibernateAPI中文版.chm

    3.6. Hibernate事务属性 3.7. 其他属性 3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 3.10. JTA TransactionManagers 9.1. 继承映射特性(Features of inheritance mappings) 16.1. ...

    Hibernate Spring MySQL项目配置图解

    这是本人上课过程中为学生讲解hibernate、spring和mysql开发简单项目的截图汇集,大家需要先自己完成数据库以及JDBC数据源的配置,之后按照该截图的顺序就能完成一个最简单的支持数据库事务处理的SH系统,(如果使用...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     20.5 Java应用通过Hibernate API声明JDBC事务  20.5.1 处理异常  20.5.2 Session与事务的关系  20.5.3 设定事务超时  20.6 Java应用通过Hibernate API声明JTA事务  20.7 Java应用通过JTA API声明JTA事务  ...

    hibernate 教程

    JCA支持 3. SessionFactory配置 3.1. 可编程配置方式 3.2. 获取SessionFactory 3.3. 用户自行提供JDBC连接 3.4. Hibernate提供的JDBC连接 3.5. 可选配置属性 3.5.1. SQL Dialects SQL 方言...

    第24次课-1 Spring与Hibernate的整合

    第24次课-1 Spring与Hibernate的整合 本节主要内容 24.1 概述 24.2 管理SessionFactory 24.3 Spring对Hibernate的简化 ...1. Spring中是怎么对Hibernate进行支持的? 2. 如何进行Spring与Hibernate的整合?

    Hibernate中文详细学习文档

    2.4. 对JCA的支持 2.5. 上下文相关的(Contextual)Session 3. 配置 3.1. 可编程的配置方式 3.2. 获得SessionFactory 3.3. JDBC连接 3.4. 可选的配置属性 3.4.1. SQL方言 3.4.2. 外连接抓取(Outer Join ...

    Hibernate 中文 html 帮助文档

    2.4. 对JCA的支持 2.5. 上下文相关的(Contextual)Session 3. 配置 3.1. 可编程的配置方式 3.2. 获得SessionFactory 3.3. JDBC连接 3.4. 可选的配置属性 3.4.1. SQL方言 3.4.2. 外连接抓取(Outer Join ...

    Spring4.0+Hibernate4.0+Struts2.3整合案例

    Spring4.0+Hibernate4.0+Struts2.3整合案例:实现增删改查。... 可以解决办法是:当方法不需要事务支持的时候,使用 Session session = sessionFactory.openSession()来获得Session对象,问题解决!

    hibernate 3中的缓存小结

    l JBossCache:可作为群集范围内的缓存,支持事务型并发访问策略,对Hibernate的查询缓存提供了支持。 2.3.5. 配置二级缓存的主要步骤: 1) 选择需要使用二级缓存的持久化类,设置它的命名缓存的并发访问策略。这...

    最全Hibernate 参考文档

    2.4. 对JCA的支持 3. 配置 3.1. 可编程的配置方式 3.2. 获得SessionFactory 3.3. JDBC连接 3.4. 可选的配置属性 3.4.1. SQL方言 3.4.2. 外连接抓取(Outer Join Fetching) 3.4.3. 二进制流 (Binary Streams) ...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    3.6. Hibernate事务属性 3.7. 其他属性 3.8. Hibernate SQL方言 (hibernate.dialect) 3.9. Hibernate日志类别 3.10. JTA TransactionManagers 9.1. 继承映射特性(Features of inheritance mappings) 16.1. ...

    hibernate 体系结构与配置 参考文档(html)

    对JCA的支持 2.5. 上下文相关的(Contextual)Session 3. 配置 3.1. 可编程的配置方式 3.2. 获得SessionFactory 3.3. JDBC连接 3.4. 可选的配置属性 3.4.1. SQL方言 3.4.2. 外连接抓取(Outer Join Fetching)...

    Hibernate教程

    3.4. 对JCA的支持 4. 配置 4.1. 可编程的配置方式 4.2. 获得SessionFactory 4.3. JDBC连接 4.4. 可选的配置属性 4.4.1. SQL方言 4.4.2. 外连接抓取(Outer Join Fetching) 4.4.3. 二进制流 (Binary Streams) ...

    Android数据库hibernate框架.

    现在每个方法都自己开启和关闭事务,暂时还不支持在一个事务中做多个操作然后统一提交事务. * (三)作者寄语: * 昔日有JavaScript借Java发展,今日也希望AHibernate借Hibernate之名发展. * 希望这个项目...

    spring事务支持

    Spring对事务管理提供完整的支持.与hibernate的集成

Global site tag (gtag.js) - Google Analytics