注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

赚客吧

 
 
 

日志

 
 
关于我

从明天起,做一个幸福的人, 洗澡,撸管,好好工作, 从明天起,关心姑娘和票子, 我有一种追求,骚气蓬勃,春心荡漾。

网易考拉推荐

【转】 hibernate与spring的集成(采用声明式事务)  

2011-05-18 16:44:21|  分类: spring |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1、声明式事务配置(applicationContext.xml中配置)
@配置SessionFactory(hibernate.cfg.xml文件里的内容可以全部配置到applicationContext.xml中)
<bean id="sessionFactory"

class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>

@配置事务管理器
<bean id="transactionManager" class="org.springframework.orm.hibernate3.

HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
@事务的传播特性
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="modify*" propagation="REQUIRED"/>
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>

@哪些类哪些方法使用事务
<aop:config>
<aop:pointcut id="allManagerMethod" expression="execution(* com.bjsxt.usermgr.manager.*.*

(..))"/>
<aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/>
</aop:config>
2、编写业务逻辑方法

* 继承HibernateDaoSupport类,使用HibernateTemplate来持久化,HibernateTemplate是Hibernate

Session的轻量级封装.事务的开启、关闭与提交都由它来管。我们可以不再手动来开启,提交或关闭

session了。因为在生成HibernateTemplate的时候要利用SessionFactory来构造,而

HibernateDaoSupport里面又提供了对SessionFactory的setter方法,所以只要用到HibernateTemplate必

须对SessionFactory进行显示的调用。
<bean id="userManager" class="en.bang.manager.UserManagerImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
* 默认情况下运行期异常才会回滚(包括继承了RuntimeException子类),普通异常是不会滚的(可通过

配置修改回滚策略)
* 编写业务逻辑方法时,最好将异常一直向上抛出,在表示层(struts)处理
* 关于事务边界的设置,通常设置到业务层,不要添加到Dao上

3、了解事务的几种传播特性
#1.PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务。如果没有事务则开启

#2.PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行

#3.PROPAGATION_MANDATORY: 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛

出异常。

#4.PROPAGATION_REQUIRES_NEW: 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务

挂起。

#5.PROPAGATION_NOT_SUPPORTED: 总是非事务地执行,并挂起任何存在的事务。

#6.PROPAGATION_NEVER: 总是非事务地执行,如果存在一个活动事务,则抛出异常

#7.PROPAGATION_NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务,
则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行

  评论这张
 
阅读(445)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017