Нулевое поле сущности заставляет метод @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)) {
...
}