Исключение не попадает внутрь метода, аннотируемого с помощью @Transactional - PullRequest
1 голос
/ 22 октября 2019

Вызов 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 Ответ

2 голосов
/ 22 октября 2019

Как упомянуто в комментариях Хади Молуди , ваша @Transactional аннотация - это то, что делает вашу Exception неуловимой.

Вы можете попытаться переместить аннотацию @Transactional в своюupdate2 метод следующим образом:

public String update() {
    try {
        return update2();
    } catch (Exception e) {
        return "Exception in update()";
    }
}

@Transactional(rollbackFor = Exception.class)
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";
}
...