`
woaiwofengkuang
  • 浏览: 25729 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

spring hibernate事务的配置

阅读更多

最近要用到Spring+Hibernate来开发。下面来说一下这两都组合后的事务管理问题。

首先我们来明白什么是事务,简单的说就是一次对数据库的操作。事务它有四个特性:原子性,持久性,隔离性和一致性。

原子性是指:对数据库的一次原子操作,要么从里写数据,要么删除数据。

持久性是指:这一个操作对数据库的影响是永久的,比如说向数据库里写入了一些数据,之后遇到的一些与物理硬件不相关的一些系统故障,但是这个被写入的数据在数据库里面还是存在的。

隔离性是指:由并发事务所作的修改必须与任何其他并发事务所作的修改隔离。事务识别数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是第二个事务修改它之后的状态,事务不会识别中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。

一致性是指:事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。

我们在项目开发时也一定是能用到事务的。下面我们就来说一下在Spring+Hibernate的环境下怎么来配置事务。首先要明白的是在这里我们要用Spring来管理事务。

在Spring中事务管理有二种方法:声明式事务管理和编程式事务管理。我们最常用的是声明式事务管理。在Spring中声明式的事务管理是用Spring的AOP来实现的。了解了这些后我们要考虑的是我们的事务到底要加在那一层,在我们的项目中往往将事务加到serivce层,这样做的好是:比如在DAO层我有三个方法来对数据进行操作,而我们的一次业务逻辑,需要我们要调用这三个方法才能完成这个一业务而这三方法还要放到一个事务中去,我们要是将事务配在DAO层我们做法只有将这三个方法分别加上一个事务,这显然违背了我们的业务需求。而在我们的service层中可以用一个方法来调用Dao层中的这三个方法,这样我们只要将serive层中的这个方法加上一个事务控制,我们业务需求就很容易的解决了。所以我们将事务大多数的要加在service层上。

在Spring的配置文件中加入这些是非常容易的。我们来看一下:

 

 

是不是很简单呀,我们来说一下,这里到底是什么意思:

首先我要配置好我们的事务管理器,在这里我们使用是Spring提供的一个Hibernate的事务管理器(位于org.springframework.orm.hibernate3包中的HibernateTransactionManager类),再就是我们要向这个类中注入一个session;它的配置和在Spring中配置基本的bean一样简单。

第二步就是我们要给那个哪些业务方法加上事务了,也就是事物特征的配置:在这里我们就要用AOP了不过也是非常简单的。我们要用一个事务通知<tx:advice>来指向我们用的是哪一个事务管理器。然后用一个<tx:attributes>下的<tx:method>来指定我们要为哪些方法加上事务操作。例:<tx:method name="del*" propagation="REQUIRED">意思是说我们要将所有以del打头的方法加上事务,事务的级别为REQUIRED级别。基中<tx:method name="*" read-only="true">是说其它的方法我全部只读事务。

最后我们要完成的工作是:要确保我们在上面定义的事务在合适的时候被执行。在这里我定义一个切面,再定义一个切入点用来说明我们要作用在哪个类或接口中的的方法上。在这里最好是作用在接口上。最后我们再定义一个通知器来和我们的事务特征绑定在一起。并将切入放在我们的一个接口上。

1
3
分享到:
评论
1 楼 zhangrun 2010-01-20  
代  码呢

相关推荐

Global site tag (gtag.js) - Google Analytics