![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| CPlusPlusFAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
Приветствую!
Возникла такая проблема. Вот есть энтити:
В его поле data нужно записать значение ключа id этой же энтити. Иными словами, для каждой записи в таблице test должны совпадать значения полей id и data. У него data NOT NULL, поэтому хорошо бы обойтись одним персистом. Можно ли в Spring+Hibernate при выполнении персиста перед непосредственно самим персистом, но после генерации ключа скопировать этот ключ? @EntityListener пробовал - не заработал. Премного благодарен! |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 8 Всего: 118 |
Может глянуть @PrePersist ?
|
|||
|
||||
| CPlusPlusFAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
У меня не работало. Может там прототип метода должен быть другим? Это сообщение отредактировал(а) CPlusPlusFAN - 1.6.2015, 14:37 |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 8 Всего: 118 |
Т.е. делаешь save и листенер не "слышит" ? Это может быть проблема реализации JPA. Какой провайдер для этого используется ?
|
|||
|
||||
| CPlusPlusFAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
Хибер 3 и 4. А может это работает только для энтити менеджера? У меня сессион фактори.
Это сообщение отредактировал(а) CPlusPlusFAN - 2.6.2015, 10:52 |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 8 Всего: 118 |
Это функциональность JPA, так что по идее надо работать через EntityManager. Нужно попробовать.
|
|||
|
||||
| CPlusPlusFAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
AntonSaburov, именно! Если юзать энтити менеджер, то события легко перехватываются.
Эх, генерация ключа происходит после перехвата события. ПС В общем, сделал свою реализацию перехвата генерации ключа:
Это сообщение отредактировал(а) CPlusPlusFAN - 3.6.2015, 00:28 |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 8 Всего: 118 |
Было у меня такое подозрение, что ключ к этому времени может и не появится. Ну может тогда проще поставить триггер на базу ? Или вызывать генератор самому при создании объекта прямо в конструкторе.
|
|||
|
||||
| CPlusPlusFAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
AntonSaburov, я делаю так: когда дергается генератор, то ключ уже точно будет сгенерен. При этом, в генераторе есть вся необходимая информация об энтити, в которую нужно записать ключ.
Более того, генераторы поддерживают конфигурирование параметрами, в которые можно передать класс листенера. ПС Ну, надеюсь, мой снипет хоть кому-то пригодится, кто вдруг столкнется с аналогичной проблемой. Это сообщение отредактировал(а) CPlusPlusFAN - 3.6.2015, 21:02 |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |