spring中@transactional的疑惑

在项目中遇到了奇怪的问题,如下

 

 原因:酒肆service里有两个函数

ClassPlayerRestaurantService{

//刷新酒肆

@transctional

public void  refreshPlayerRestaurant(int id){

        PlayerRestaurant playerRestaurant = playerRestaurantDao.read(id);

        //增加酒肆次数

        addPlayerRestaurant(id,count,type);

        //更新酒肆时间

        setPlayerRestaurantTime;

}

@transctional

addPlayerRestaurant(intid,int count,int type){

}

 

}

refreshPlayerRestaurant在其他类中调用时,酒肆次数增加,时间刷新,表现正常。

在类内调用时只刷新了时间,而次数未增加。


原因分析

这两个函数是被spring托管的

上个版本是在PlayerRestaurantService之外调用的refreshPlayerRestaurant,所以refreshPlayerRestaurant addPlayerRestaurant两个嵌套事务被当成一个大的事务一起提交到数据库。因此是正确的。

这个版本加了酒肆次数提示,将refreshPlayerRestaurant挪到了PlayerRestaurantService里面另外一个函数里。@transctional

spring托管的类内部失效了,这样的话在调用refreshPlayerRestaurant时就只会更新时间,不会增加次数。

第一次bug修改的话是把更新酒肆时间部分挪到了addPlayerRestaurant(intid,int count,int type)里面,但是没有考虑到这个函数在升级奖励时也调用了,这样升级的时候就会把时间更新到后面去了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值