![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| ShurikA |
|
||||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
вот таким образом это не работает:
Выдаёт:
|
||||
|
|||||
| powerOn |
|
||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
Самый простой в данной ситуации (когда ну просто никак не избежать доступа к БД из слушателя сущностей) способ это создать EJB компонент с @Remote интерфейсом, в который будет инжектироваться EntityManager. Из слушателя получать доступ к бину.
В коде слушателя:
Но! Мне такой подход не очень нравится. Прямо "Паблик Морозов" какой-то получился... никак не "сервис-локатор"... Поэтому я предлагаю общую логику работы с БД вынести в DaoBean и пусть он будет настоящим Dao сервисом. Добавлено через 3 минуты и 11 секунд Да, замечу, что доступ к EJB через JNDI весьма зависит от сервера приложений что вы используете. Данный вариант был описан для Glassfish. ЕМНИП, на JBoss необязательно делать бин с удаленным интрефейсом, можно и до локального простым лукапом достучаться. |
||||
|
|||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
powerOn,
Кстати, есть какая то причина что PreUpdate не вызывается если он прописан в MappedSuperclass, а не в самой сущности? |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
||||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Я где то выкопал что это баг. Сейчас не могу найти где? Добавлено через 1 минуту и 57 секунд Но на самом деле он мне в суперклассе не очень нужен. Можно было бы эту функцию сделать generic абсолютно для всех, но она будет немногим медленная. |
|||
|
||||
| sandello |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 18.5.2005 Где: Пермь Репутация: нет Всего: 2 |
Похожую, если не именно эту, задачу решает проект Envers. Правда, он обладает кучей ограничений. К примеру, заточен под hibernate
-------------------- ![]() |
|||
|
||||
| ShurikA |
|
||||||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Воткнулся в очередную проблемму:
При этом CustomerType выглядет так:
|
||||||
|
|||||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Если анотацию @PreUpdate убрать, то всё ОК.
|
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
все аннотации либо всегда указывают на методах, либо всегда на полях. т.е. изначально выбирается один стиль. в твоем случае нужно указывать на методах, поскольку @PreUpdate на поле нельзя указать.
|
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
powerOn,
То есть мне нужно все мои анотации перенести на методы? Это достаточно сделать только в одном классе? |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
||||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
если класс(Entity) порождается от папы а папа в свою очередь от его папы, и папа и дедушка должны быть @MappedSuperclass ?
|
|||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
OK, вроде всё работает и вызывается. Следуюшая проблемма выглядит так как будто @PreUpdate вызывается после того как поля уже поменянны, как можно отловить момент до того как они меняются? Это сообщение отредактировал(а) ShurikA - 14.1.2009, 10:34 |
|||
|
||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
||||
|
||||
| ShurikA |
|
|||
![]() Зануда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1364 Регистрация: 29.10.2005 Где: Канада Репутация: нет Всего: 3 |
Правильно, но поля обьекта уже изменены к тому времени. |
|||
|
||||
![]()
|
| Правила форума "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. |