`
bruce008
  • 浏览: 173348 次
  • 性别: 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 对事务的处理在以后的文章中会提到。 

分享到:
评论

相关推荐

    详解Hibernate事务处理机制

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

    Spring+Hibernate注解事务实例

    通过实践这个实例,你不仅能掌握Spring和Hibernate的基本用法,还能深入理解声明式事务管理的工作原理,这对于开发复杂的、需要事务支持的Java应用程序来说是非常重要的。这将提高你的代码质量和可维护性,让你的...

    Spring Hibernate事务实例

    2. Hibernate事务管理:使用`HibernateTransactionManager`结合SessionFactory进行事务控制。 3. AOP(面向切面编程)在事务管理中的应用:`TransactionInterceptor`基于AOP拦截方法调用,处理事务。 4. 配置事务...

    Hibernate 事务和并发控制

    此外,Hibernate还支持读写分离和第二级缓存来优化并发性能。读写分离将读操作和写操作分散到不同的数据库实例上,减轻主库压力。第二级缓存可以存储已查询过的对象,减少对数据库的直接访问,提高系统性能。...

    Spring Hibernate 事务处理 详细说明

    3. **Hibernate事务配置:**在Spring中,需要配置Hibernate SessionFactory,并将其注入到需要进行数据库操作的服务中。同时,通过`PlatformTransactionManager`接口(如HibernateTransactionManager)配置事务管理...

    spring整合hibernate实现事务处理

    在`Spring_1800_Spring_Hibernate_Transaction_Annotation`这个压缩包文件中,很可能包含了使用注解方式实现Spring整合Hibernate事务处理的相关示例代码和配置文件。通过阅读和理解这些代码,你可以更好地掌握这一...

    Hibernate事务(源码)

    **Hibernate事务管理详解** 在Java开发中,尤其是在企业级应用中,事务管理是不可或缺的一部分。Hibernate作为一款流行的ORM(对象关系映射)框架,提供了强大的事务处理能力。本篇文章将深入探讨Hibernate中的事务...

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

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

    在Spring中配置Hibernate事务

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

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

    为了优化事务处理,Spring和Hibernate还支持开放Session in View(OSIV)模式。在Web应用中,为了避免因为Session在请求结束时自动关闭导致的部分更新丢失问题,OSIV模式会在整个视图渲染过程中保持Session打开,...

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

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

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

    这意味着,当你的应用程序与数据库进行交互时,其行为遵循数据库定义的事务隔离级别,而真正的事务支持取决于底层数据库的实现。 #### 三、事务并发处理 Hibernate 提供了两种主要的并发控制机制: 1. **乐观锁...

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

    至于工具,开发者可以使用诸如IntelliJ IDEA这样的IDE,其中集成的调试工具可以帮助我们跟踪代码执行流程,查看事务状态的变化,进一步加深对事务管理的理解。 在学习过程中,阅读博客如《spring hibernate 事务...

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

    `Atomikos` 是一个开源的JTA实现,它提供了对分布式事务的支持,可以与Spring集成,处理多数据源的事务管理。 在Spring中配置Druid和Hibernate结合Atomikos进行分布式事务管理的步骤如下: 1. **引入依赖**:在...

    spring hibernate mysql 事务实例

    // 这里对数据库的操作,如果出错,整个事务会被回滚 userRepository.save(user); } } ``` 在这个例子中,`addUser`方法被标记为`@Transactional`,这意味着如果在方法执行过程中出现异常,Spring会自动回滚事务...

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

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

    Hibernate编程式事务与Spring Aop的声明式事务(spring与hibernate集成)

    Hibernate作为流行的ORM(对象关系映射)框架,提供了对JDBC事务的封装。编程式事务管理允许开发者手动控制事务的边界。以下是一些关键概念: 1. **Session**: Hibernate的核心接口,负责对象的持久化。在事务开始...

    Hibernate数据库事务

    没有事务的支持,任何对数据库的更改都可能造成不可预测的结果。因此,在 Hibernate 中进行数据库操作时,明确声明并管理事务是非常必要的。 #### 三、非托管环境中的事务管理 在非托管环境中,比如独立的 Java ...

    第二部分spring+hibernate+jta 分布式事务Demo

    Hibernate支持JTA事务,可以在分布式环境中参与事务处理。 3. **JTA**:Java Transaction API是Java平台的标准接口,用于处理分布式事务。它定义了开始、提交、回滚事务以及管理事务参与者等操作。JTA可以协调多个...

    spring2.5 hibernate3.2 事务

    在这个文件中,我们可以看到如何配置Hibernate的SessionFactory,如何将SessionFactory注入到DAO层,以及如何配置事务管理器(如HibernateTransactionManager),以实现Spring对Hibernate事务的控制。 `petclinic....

Global site tag (gtag.js) - Google Analytics