繁体   English   中英

Spring启动@Transactional不起作用

[英]Spring boot @Transactional doesn't work

我在服务层的方法上添加了@Transactional。

@Transactional(readOnly = false)
public void add(UserFollow uf){
    UserFollow db_uf = userFollowRepository.findByUserIdAndFollowUserId(uf.getUserId(), uf.getFollowUserId());
    if(db_uf == null) { 
        userFollowRepository.save(uf);      
        userCountService.followInc(uf.getFollowUserId(), true);
        userCountService.fansInc(uf.getUserId(), true);

        throw new RuntimeException();// throw an Exception
    }
}

userFollowRepository.save(UF); 仍然保存成功,不回滚...

我在应用程序上启用事务管理器。

@Configuration  
@ComponentScan 
@EnableAutoConfiguration  
@EnableJpaRepositories
@EnableTransactionManagement
public class Application {  

    @Bean
    public AppConfig appConfig() {
       return new AppConfig();
    }

    public static void main(String[] args) {  
       SpringApplication.run(Application.class);  
    }  
}  

我将@Transactional移动到Control层,它可以工作,代码:

@Transactional
@RequestMapping(value="following", method=RequestMethod.POST)
public MyResponse follow(@RequestBody Map<String, Object> allRequestParams){
    MyResponse response = new MyResponse();

    Integer _userId = (Integer)allRequestParams.get("user_id");
    Integer _followUserId = (Integer)allRequestParams.get("follow_user_id");



    userFollowService.add(_userId, _followUserId); //this will throw an exception, then rollback


    return response;
}

任何人都可以告诉我原因,谢谢!

根据http://spring.io/guides/gs/managing-transactions/

@EnableTransactionManagement激活Spring的无缝事务功能,这使得@Transactional功能成为可能

所以它在你添加了@EnableTransactionManagement之后就开始工作了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM