исключение nullPointerException для значения nullable = false - PullRequest
0 голосов
/ 12 ноября 2011

Этот метод делает следующее: он получает int startAge из базы данных.Этот параметр имеет значение по умолчанию 0 и не может иметь значение NULL.Затем он проверяет, является ли он больше нуля, и в этом случае он добавляет его в dob и возвращает его.

На самом деле довольно просто, но я продолжаю получать исключение NullPointerException на отмеченной строке, хотя База данных гарантирует, что переменная НЕ МОЖЕТ быть нулевой, а для параметра groupFrom в классе сущности также установлено значение nullable = false.

Есть подсказки?

public static DateMidnight getRealStartDate(DateMidnight startDate, DateMidnight dob, Groups group){
    DateMidnight realStart = null;
    int startAge = group.getGroupFrom(); //nullPointerException
    if (startAge > 0) {
        realStart = dob.plusMonths(startAge);
    } else {
        realStart = startDate;
    }   
    return realStart;
}

Ответы [ 5 ]

1 голос
/ 12 ноября 2011

Чтобы заявить, что другие говорили немного по-другому, вы можете путать значение поля в базе данных, которое, вероятно, не равно NULL, со значением группы объектов в вызове ниже. Метод getGroupFrom также может содержать ошибку, из-за которой он не может вернуть правильное значение из базы данных.

group.getGroupFrom()
1 голос
/ 12 ноября 2011

Лучше использовать утверждения, если вы не совсем уверены в своем коде. В группу пример

 DateMidnight realStart = null;
 assert group != null;
 int startAge = group.getGroupFrom(); //nullPointerException
1 голос
/ 12 ноября 2011

Хотя это и некрасиво. Если вы не можете использовать отладчик:

Вставьте эти строки во вторую строку:

if (group == null) {
  System.out.println("group is null");
} else {
  System.out.println("group isn't null");
}

Я уверен, что будет напечатано "группа нулевая" , потому что что-то с вашими предположениями не работает.

Вы можете использовать такие инструменты, как log4j или slf4j для более профессионального вывода. :)

1 голос
/ 12 ноября 2011

Я подозреваю, что в базе данных есть данные с group == null.Хотя для группы установлено значение nullable=false, насколько я знаю, это всего лишь ограничение INSERT.Вероятно, в базе данных уже есть строки с нулевой группой.Может быть, другой объект вставляет данные, которые не имеют ограничения, допускающего обнуляемость?

Можете ли вы выполнить запрос к базе данных для поиска пустых групп, чтобы выяснить, существуют ли они?

SELECT COUNT(*) FROM foo WHERE 'group' IS NULL;

Надеюсь, это поможет.

0 голосов
/ 12 ноября 2011

Если в этой строке вы получаете исключение NullPointerException, это означает, что группа переменных равна нулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...