异常不会被@Transactional注解的方法捕获

时间:2019-10-22 06:18:15

标签: java spring hibernate spring-boot spring-data-jpa

在Spring Boot中从Controller调用update()时使用@Transactional进行注释,并且此update()调用update2()。因此,当我尝试使用update2()将重复值保存到数据库中时,不会向update()抛出异常,而是转到Controller方法。我想在update()中处理异常。

@Transactional(rollbackFor = Exception.class)
    public String update()
    {
        try 
        {
            return update2();
        }
        catch (Exception e) {
            return "Exception in update()";
        }
    }


    public String update2() throws Exception
    {

        List<Employee> l = repo.findAll();
            for(int i=0 ; i<2 ; i++)
            {
                if(i==0)
                    l.get(i).setUsername("duplicate_value");
                else
                    l.get(i).setUsername("unique_value");
            repo.save(l.get(i));
            }

        return "success";
    }

1 个答案:

答案 0 :(得分:2)

正如评论中提到的Hadi Moloodi一样,您的target-module.ts: @Module({ imports: [SharedModule] }) export class TargetModule {} 注释使您的@Transactional无法被捕获。

您可以尝试将Exception注释移至@Transactional方法,如下所示:

update2