Выполнение нескольких запросов (вставка и обновление) в одной транзакции с использованием шаблона Spring JDBC

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
0
задан user2390827 18 January 2019 в 17:48
поделиться

3 ответа

Согласно весенней документации

Видимость метода и @Transactional

При использовании прокси вы должны применять аннотацию @Transactional только к методам с публичной видимостью. , Если вы аннотируете защищенные, частные или видимые пакетами методы с помощью аннотации @Transactional, ошибка не возникает, но аннотированный метод не отображает настроенные параметры транзакции. Подумайте об использовании AspectJ (см. Ниже), если вам нужно аннотировать закрытые методы.

0
ответ дан Sai prateek 18 January 2019 в 17:48
поделиться

Просто убедитесь, что они подпадают под один метод, который помечен как @Transactional.

Если после второго обновления произойдет сбой, первое будет откатано, и вы будете поддерживать базу данных в согласованном состоянии.

0
ответ дан Maciej Kowalski 18 January 2019 в 17:48
поделиться

Я думаю, что ваш ApplicationException является проверенным исключением. Spring не откатит транзакцию, если транзакционный метод по умолчанию выбрасывает проверенное исключение (только не проверено) Но вы можете добавить откат для него вручную следующим образом:

@Transactional(rollbackFor = ApplicationException.class)
0
ответ дан Artur Vakhrameev 18 January 2019 в 17:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: