Нет, метод обратного вызова @PreUpdate
не всегда выполняется, когда выполняется метод обратного вызова @PrePersist
. @PrePersist
выполняется до операции постоянства (прямой или каскадный) и @PreUpdate
до обновления базы данных.
В спецификации JPA 2.1 (3.5.3 Семантика методов обратного вызова жизненного цикла для объектов) об этом говорят следующие слова:
Методы обратного вызова PrePersist и PreRemove вызываются для данного объекта перед соответствующие EntityManager сохраняют и удаляют операции для этого объекта.
BLOCKQUOTE>
...
Обратные вызовы PreUpdate и PostUpdate происходят до и после операций обновления базы данных до данных объекта соответственно.
Я думаю, что необходимо быть прагматически настроены об этом. Я работаю над проектом, который состоит из StatsController. Количество действий непрерывно растет (RandomStat, MostPopular, MostViewed, MostVoted, и т.д....), список продолжается и на. Эти действия просты удовлетворить, так как зависимости StatsController не изменяются. Я использую МОК для удовлетворения то, в чем нуждаются мои Контроллеры и когда я начинаю видеть, что моим Контроллерам нужны ссылки на новые объекты, это - сигнал, что они должны быть разбиты.
Если Ваш LoginController, PasswordController и ProfileController, все полагаются на те же объекты, почему разбивают их?
Необходимо выделить контроллер для каждого типа модели, которым Вы управляете. Контроллер действует как набор действий, которые реагируют на те модели. Это обычно - эмпирическое правило, но иногда объем контроллера превышает единственную модель.
AccountController имеет дело со всеми вещами связанная аутентификация. Это - пример выхода за пределы объема единственной модели для затрагивания аутентификации в целом. Каковы ключевые роли аутентификации? Получение пользователей, изменение паролей, и т.д.
Мой текущий AccountController имеет 12 методов, чтобы мне абсолютно управляемо.
У меня есть другой контроллер, который в настоящее время имеет 34 метода, но они все связываются с единственным представлением, и у каждого из них есть приблизительно 8-10 строк кода макс. (проверьте обязательные параметры, обновите модель и перенаправьте по мере необходимости).
Они вводят, должен инкапсулировать Вашу бизнес-логику в совершенно отдельном модуле. Это позволит Вашим обработчикам действий сохранять чрезвычайно легкий вес и может сделать тестирование Вашей бизнес-логики легче.