wolovetama 2009-08-31 17:19
浏览 691
已采纳

service层配置事务问题

今天遇到个问题,利用spring将事务配置在了service层,在其中一个业务方法中需要2次调用同一个dao的delete方法,删除某个对象的时候是不一定成功的(有外键引用的话就不能删除),在删除多个对象的时候出现了问题,比如现在删除2个对象,第一个对象是可以删除的,可是第2个对象是删除不了的,这个时候我希望在第二个删除失败的时候,第一个对象也不要被删除,也就是说我想他们处在同一事务中,不知道怎么配置,以下是部分配置!
PROPAGATION_REQUIRED,-Exception、
请大家帮忙!
补充说明:在日志中发现,他是先删除一个对象,然后直接提交事务的!现在知道是这个原因,但是怎么改配置能让他们处于通一事务中呢?

[b]问题补充:[/b]
问题是我现在dao层是没配置事务的啊,但就是第一个被删除了!
请问dao层如果不配置事务的话,那么默认他有没有事务呢?
[b]问题补充:[/b]
配置文件中就是这样配置的
PROPAGATION_REQUIRED,-Exception、

[b]问题补充:[/b]





class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">





PROPAGATION_REQUIRED,+Exception
PROPAGATION_REQUIRED,-Exception
PROPAGATION_REQUIRED,-Exception
PROPAGATION_REQUIRED


所有配置

[b]问题补充:[/b]




<bean id="pricingService" class="com.lilg.service.PricingServiceImpl">
    <property name="dao">
        <ref bean="PricingDAO"/>
    </property>
</bean>

[b]问题补充:[/b]
public void delete(Pricing persistentInstance) {
log.debug("deleting Pricing instance");
try {
getHibernateTemplate().delete(persistentInstance);
log.debug("delete successful");
} catch (RuntimeException re) {
log.error("delete failed", re);
throw re;
}
}
这个是dao代码,我不清楚你说的配置事务是说明意思?
[b]问题补充:[/b]
PROPAGATION_REQUIRED,-Exception 这里算不算配置事务呢?
[b]问题补充:[/b]
但是很奇怪,现在就是在删除的时候如果第一个删除ok第二个失败的话 第一个不会回滚,在看日志记录的时候发现他在删除第一个的时候开启了事务,然后删除结束后就提交了事务,不知道为什么了? 难道dao不配置默认也是有事务的?
[b]问题补充:[/b]
public void delete(Pricing persistentInstance) {
log.debug("deleting Pricing instance");
try {
getHibernateTemplate().delete(persistentInstance);
log.debug("delete successful");
} catch (RuntimeException re) {
log.error("delete failed", re);
throw re;
}
}
这个就是dao代码! 谢谢帮忙
[b]问题补充:[/b]
dao代码贴出来了 是没有事务的!
[b]问题补充:[/b]
回复 constant

我也很奇怪,配置信息及dao代码都贴上来了就是比较郁闷。第一个总是本删除
我看了日志,在删除第一个的时候他打开事务的删除完毕之后就提交事务。
但是我的dao根本是没有配置事务的! 郁闷了
[b]问题补充:[/b]
各位好!我发现问题了! 本来应该是在service方法里调用2次dao里的delete方法,而代码是在action类里2次调用了service类的方法。 哎 还是不够细心的问题 ! 谢谢你的帮忙 !  谢谢大家的帮忙!

  • 写回答

16条回答 默认 最新

  • wanghaolovezlq 2009-09-01 14:06
    关注

    应该是getHibernateTemplate().delete(persistentInstance); 导致的问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(15条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog