| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Hibernate-изменить поля бина после их заполнения |
| Автор: isabsent 7.6.2011, 15:44 | ||
Нужно выполнить метод в Entity, изменяющий поля Entity сразу после заполнения этих полей данными из таблицы - что-то похожее на @PostConstruct. Обнаружил похожую аннотацию @PostUpdate, но не нашёл в доках Hibernate её описания. Подскажите, кто сталкивался, когда она применяется и почему
ничего не делает после заполнения полей данными из таблицы? |
| Автор: Embedded 7.6.2011, 16:05 | ||
| isabsent, Вот callback'и с кратким описанием:
Добавлено @ 16:11 Похоже тебе нужен PostLoad Обратный вызов PostLoad происходит после того, как данные для сущности считаны из базы данных, и экземпляр сущности создан. п. с. PreUpdate и PostUpdate Обновления сущности могут произойти в любое время, как в пределах транзакции (в случае расширенного контекста персистентности) так и вне транзакции. Поскольку нет никакого явного метода у EntityManager, обратный вызов PreUpdate, гарантированно, будет вызван только в некоторый момент перед обновлением базы данных. Некоторые реализации могут отследить изменения динамически и могут вызвать обратный вызов на каждое изменение, в то время как другие могут ожидать до конца транзакции и только вызвать обратный вызов единажды. |
| Автор: isabsent 7.6.2011, 16:26 |
| Да, @PostLoad - это, похоже, то что надо! Но он не работает у меня почему-то... Не могу понять причину :( Как поставить breakpoint на метод, если его вызываю не я, а контейнер когда создаёт бины!? P.S. Вы упоминаете EntityManager - скорее всего это из JPA? Но у меня он не используется, Spring напрямую связан с Hibernate. Может поэтому @PostLoad не работает? |
| Автор: Embedded 7.6.2011, 16:44 |
| isabsent, ааа... ну тогда тебе сюда http://docs.jboss.org/hibernate/core/3.5/reference/en/html/events.html А то @PostLoad это только для EntityManager (JPA) варианта. п.с. отредактировал ссылку, в адресе была ошибка |
| Автор: isabsent 7.6.2011, 17:14 | ||
| Понял, спасибо! Хотелось чего-то просто в виде аннотации на метод. Почему из всех аннотаций
у меня отказывается работать только javax.persistence.PostLoad ? |
| Автор: Embedded 7.6.2011, 17:25 |
| isabsent, вот этого не знаю, знаю только что @PostLoad (EJB3) не работает с SessionFactory |