spring管理hibernate事务(CSDN的朋友们帮个忙)

wenjjing2lianee 2010-01-20 05:36:04
我希望可以配置spring管理hibernate事务,当一个service调用多dao的时候,全部save成功才commit,可以怎么实现?
这是配置文件
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" />

<bean id="accountManagerTarget" class="com.vas.brd.service.impl.AccountManagerImpl">
<property name="userOrderDAO"><ref local="userOrderDAO"/></property>
</bean>

<bean id="accountManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref local="transactionManager"/></property>
<property name="target"><ref local="accountManagerTarget"/></property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
/*******************************************************************************/

sevice就没写了

public class AccountManagerImpl implements AccountManager {

public SyncResponseInfo saveKnSyncData(){
//1
dao.saveObject2(object1);
//2
dao.saveObject1(object2)); //当1成功,2失败.1提交的数据不会回滚????。
}
}

如何才能实现这种,是不是不应该用这种事务管理?

有高手帮忙详细解释一下关于事务的内容?


我这问题和这个贴差不多,但回答的结果也不是很理想:
http://topic.csdn.net/t/20050922/11/4286441.html

...全文
198 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenjjing2lianee 2010-01-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xielittle 的回复:]
http://download.csdn.net/source/1972099
[/Quote]

这个资源免费,而且很好,支持,感谢!
wenjjing2lianee 2010-01-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhigangxie 的回复:]
“2失败”时抛出的是 checked 异常还是 unchecked 异常?有没有自已 catch ?有没有考虑过 rollback-for 的配置?
[/Quote]

是checked受控异常,应该就是这个原因了.
在这种配置当中没有rollback-for这个属性,看来只能使用<tx:method>或者使用@Transactional

1.
<!-- 配置事务通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" rollback-for="Exception"/>
</tx:attributes>
</tx:advice>
2.@Transactional(propagation=Propagation.REQUIRED, rollbackFor=Exception.class)

难道我的这种配置里在这种情况就不能够让它回滚,还是我没有找到像rollback-for这种属性.

谢谢你的回答
tangwei070 2010-01-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zl3450341 的回复:]
Java code<!-- 事务管理实体--><bean id="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory"><ref bean="sessionFactory"/></property></bean?-
[/Quote]
恩 一直用这种。 就是感觉通俗易懂吧 呵呵
zl3450341 2010-01-20
  • 打赏
  • 举报
回复
<!-- 事务管理实体 -->
<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="find*" propagation="REQUIRED" read-only="true"/>
<!-- 其它方法使用普通事务 -->
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>

<!-- aop切入 -->
<aop:config>
<aop:pointcut expression="execution(* com.ssh.service.*.*(..))" id="interCut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="interCut"/>
</aop:config>
zhigangxie 2010-01-20
  • 打赏
  • 举报
回复
“2失败”时抛出的是 checked 异常还是 unchecked 异常?有没有自已 catch ?有没有考虑过 rollback-for 的配置?
monkeyking1987 2010-01-20
  • 打赏
  • 举报
回复
建议你用声明式事务..具体配置如下:
<!--transsactionManager-->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager" >
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!--advisor-->
<tx:advice id="txAdvice1" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="modify*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>

<!--设置哪些类配置声明式事务-->
<aop:config>
<aop:pointcut id="pointcut1" expression="execution (* com.mkk.ssh.service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice1" pointcut-ref="pointcut1"/>
</aop:config>

要不用使用Hibernate的currentSession.也可以.
xielittle 2010-01-20
  • 打赏
  • 举报
回复
http://download.csdn.net/source/1972099
wenjjing2lianee 2010-01-20
  • 打赏
  • 举报
回复
dao.saveObject2(object1);
//2
dao.saveObject1(object2)); //当1成功,2失败.1提交的数据不会回滚



当1成功,2失败.1提交的数据不会回滚啊
道光2008 2010-01-20
  • 打赏
  • 举报
回复
你现在配置的事物管理,在saveKnSyncData就是一次性完全提交或者回滚嘛。有什么问题。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧