Нулевое поле сущности заставляет метод @PostUpdate молча останавливаться

У меня есть сущность домена JPA, которую я обновляю из пользовательского ввода. В зависимости от множества факторов, связанных с этим объектом, у него есть действия, которые нужно выполнить при обновлении (в этом случае обновление "помечает его как завершенное").

В базе данных два поля "конфигурация действия после завершения" (note и next_workflow) имеют значение NULL и имеют либо значение, представляющее интерес, либо NULL. Их может быть очень много, но я начинаю с этих двух.

Я написал следующий метод в классе модели:

@PostUpdate
public void gotUpdate() {
    System.out.println("Got post update for " + this.getDescription());
    if (! this.getNote().isEmpty()) {
        Note n = new Note();
        n.setAssetId(this.getAssetId());
        n.setNotifyLessor(1);
        n.setNote(this.getLessorNote() + this.getCapturedData());
        n.setCreatedDate(new Date());
        n.persist();
    }
    System.out.println("In the middle of post update for " + this.getDescription());
    if (this.getNextWorkflow() != 0) {
        Asset a = this.getAssetId();
        a.setWorkflowId(Workflow.findWorkflow(this.getNextWorkflow()));
        a.merge();          
    }
    System.out.println("Finishing post update for " + this.getDescription());
}

Для сущностей со значениями NULL "note" вывод консоли будет следующим:

Got post update for this item

Для сущностей с ненулевыми значениями "note" и со значениями NULL "nextWorkflow" консольный вывод:

Got post update for this item
In the middle of post update for this item

Нигде нет ошибок, нет стека дампов, нет ничего. Метод просто молча завершается, И слияние, которое я делаю с этой сущностью, не завершается (база данных остается неизменной).

Пройдя через это в отладчике, вы попадаете в ту строку, где тестируются вещи, и, если значение равно NULL, появляется всплывающая вкладка с надписью "Источник не найден", из которого я не знаю, что делать. Я думаю, что это просто отладчик, который говорит, что не может вмешаться во что-то, но на самом деле я не прошу этого...

1 ответ

Решение

Вопрос новичка, оказывается.

Если Object"s field поле равно нулю, тогда object.getField().length() это вызов нулевого указателя.

Ответ состоит в том, чтобы проверить поле на нулевое значение, а не на некоторый побочный эффект нулевого значения.

if (! (this.getNote() == null)) {
...
}
Другие вопросы по тегам