Обычный поисковый select-запрос, реализованный с помощью Criteria API, после своего выполнения отсылал update-запрос базе. В большинстве случаев в этом не было ничего критичного, ну разве что перфоманс слегка страдал. Вот никто и не замечал... Сегодня же select выполнялся ко view, поэтому следующий за ним update вызвал ошибку.
Caused by: java.sql.SQLSyntaxErrorException: ORA-01031: insufficient privileges Caused by: org.hibernate.exception.SQLGrammarException: could not updateОбъяснение эффекта достаточно простым оказалось, но тем не менее.Всё работает абсолютно так, как должно быть: в классе был метод @PostLoad, проверяющий определённые строковые поля на null и заменяющий их на пустые строки. После окончания работы с данными Hibernate проверял объект, видел изменения и считал необходимым сделать аналогичные изменения в БД. Отсюда и update, отсюда и ошибка шла. Ещё чаще подобные "нежелательные" апдейты встречаются, когда orm работает через методы-аксессоры, а не через поля, а программисты спасаются от NullPointerException, делая вот такие getter'ы:
public String getStr() { return str == null ? "" : str; }Вообще, любые изменения приводят к такому вот эффекту... Например замена "Ё" на "Е", поэтому надо помнить об этой особенности.
Комментариев нет:
Отправить комментарий