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条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!