![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| sandello |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 18.5.2005 Где: Пермь Репутация: нет Всего: 2 |
Есть необходимость представить дерево в виде Entity. Если я правильно понимаю, будет создана таблица со ссылкой на саму себя.
Как это грамотно реализовать в виде Entity? Главную проблему вижу в том, что при попытке получить корень из базы будет рекурсивно загружено все дерево целиком. Нужно (как правило) только текущий узел и его следующее поколение. Решение практической задачи вижу двумя путями: 1. в лоб: реализовать Entity "узел дерева" и работать с ним 2. не пользоваться вообще Entity. Реализовать класс, содержащий узел и его следующиее поколение, написать загрузчик для него. Это сообщение отредактировал(а) sandello - 13.10.2005, 13:18 -------------------- ![]() |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Думаю можно смело реализовывать entity EJB, представляющий узел дерева. Благодаря тому, что при обращении к атрибутам entity EJB реально вызываются не методы этого объекта, а методы объекта-заглушки, производитель контейнера EJB имеет возможность реализовать любой алгоритм оптимизации загрузки данных, так как до вызова реального объекта можно выполнить любой код, связанный в том числе и с загрузкой/выгрузкой данных.
Более того, спецификация EJB также говорит о том, что производитель вправе оптимизировать загрузку и выгрузку данных (JSR 220: Enterprise JavaBeans, Version 3.0, раздел 8.4.2.1). Чаще всего разработчики серверов приложений пользуются такой возможностью и реализуют так называемую загрузку по требованию (lazy loading), то есть какой-то реальный объект появляется в атрибуте только после вызова метода. Таким образом, все дерево целиком рекурсивно загружено скорее всего не будет, хотя зависит все от контейнера. Однако, наверняка большинство разработчиков такой возможностью не пренебрегает. |
|||
|
||||
| sandello |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 18.5.2005 Где: Пермь Репутация: нет Всего: 2 |
Я не хочу использовать в этом месте Lazy loading. Ибо нужно быстро вытащить данные из базы и передать наружу из AS.
Если использовать lazy, придется находить нужный entity, циклом пробежаться по его непосредственным потомкам и только после этого выдавать его наружу, предварительно отломав от entityManager'а. -------------------- ![]() |
|||
|
||||
![]()
|
| Правила форума "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. |