九、同时使用jdbcTemplate和hibernate时,事务控制


   
       
   

 


   
       
       
       
       
       
       
       
       
   


   
   
       
           
           
           
           
           
                            rollback-for="com.ygtime.man.core.exception.BusinessException" />
       

   

 

public class ShopInfoManagerImpl{

 

    @Override
    public void depositReturn(long shopId, double money, SysUser sysUser) {
        
        int deposit = jdbcTemplate.queryForInt(
            "select deposit from TM_PAY_SHOP_INFO where id=? for update", new Object[] { shopId });
        
        if (new Money(money).getCent() > deposit) {
            throw new BusinessException("充值回退失败:余额不足");
        } else {
            
            jdbcTemplate.update("update TM_PAY_SHOP_INFO set deposit=? where id=?", new Object[] {
                    deposit - new Money(money).getCent(), shopId });
            
        }
        
        saveJournal(shopId, money, sysUser, DepositChangeJournal.CHANGE_TYPE_RETURN,
            DepositChangeJournal.CHANGE_STATUS_SUCCESS);
        
        int i = 1 / 0;
        System.out.println(i);
        
    }   

}

 

那么depositReturn方法里面的jdbcTemplate的操作,都在事务控制之类。

在执行int i = 1 / 0;System.out.println(i);之后,所有都会回滚。

而不再是每执行一次jdbcTemplate都会自动提交jdbcTemplate的事务。

你可能感兴趣的:(spring事务管理)