![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
dimanenok |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 11.5.2008 Репутация: нет Всего: нет |
Есть проблема. Есть багтреккер на Spring+Hibernate.
В нем страничка где список багов. Метод который готовит данные для странички - выдергивает для каждого бага только те поля-объекты которые отобразятся на странице списка багов, поскольку lazy везде стоит false.
У каждого бага еще есть коллекция комментариев, их может быть очень много. Задача - как не инициализируя эти комментарии отобразить их количество для каждого бага? Скажем есть 100 багов на странице, у каждого в среднем по 10 комментариев и нельзя чтобы только изза того что надо показать колонку с циферкой количества комментариев проинициализировались 1000 объектов в памяти. Можно специально добавить поле к багу где это количество комментариев будет храниться, но это приведет к лишним операциям по поддержанию поля в актуальном состоянии, наверняка Spring позволяет решить эту проблему както изящнее. Кто-то что подобное уже делал? Буду благодарен за любые наводки ![]() Это сообщение отредактировал(а) powerOn - 4.4.2009, 00:01 |
|||
|
||||
ecologist |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 452 Регистрация: 28.2.2007 Репутация: 5 Всего: 9 |
Можно попробовать сделать вычисляемое поле - смотри аннотацию @Formula - там можно просто задать SQL который будет вычислять это поле - вбиваем туда SELECT COUNT(*) FROM.
Не буду гарантировать, что это точно поможет - но можно попробовать. |
|||
|
||||
lando1 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 30.4.2007 Репутация: нет Всего: нет |
по-моему все же лучше добавить дополнительное поле в бд, где хранить число постов.
Это сильно ускорит процесс выдачи данных, иначе в вашем примере придется еще 100 раз вызвать (SELECT COUNT(*) FROM) |
|||
|
||||
dimanenok |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 11.5.2008 Репутация: нет Всего: нет |
Большое спасибо за совет! Добавил вычисляемое поле commentsnumber у класса Issue и мапинг <property name="commentsnumber" type="java.lang.Integer" not-null="true" lazy="true" formula="( SELECT COUNT(*) FROM ISSUE_COMMENT ic where ic.CISSUE=CID )"> </property> И вывод числа комментариев для каждого бага работает. Но только вот к моему удивлению агрегатная функция COUNT подтянула на страницу все комментарии багов (которые в списке багов конечно не нужны), вместо того чтобы вернуть цифру и забыть о них ( Это наверно уже нельзя побороть, такое свойство хибернейта? |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
количество записей для каждого ID можно получить одним запросом SELECT ID, COUNT(*) FROM ... GROUP BY ID Это сообщение отредактировал(а) COVD - 6.4.2009, 00:13 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |