| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Spring - как отобразить размер коллекции |
| Автор: dimanenok 3.4.2009, 19:15 | ||
| Есть проблема. Есть багтреккер на Spring+Hibernate. В нем страничка где список багов. Метод который готовит данные для странички - выдергивает для каждого бага только те поля-объекты которые отобразятся на странице списка багов, поскольку lazy везде стоит false.
У каждого бага еще есть коллекция комментариев, их может быть очень много. Задача - как не инициализируя эти комментарии отобразить их количество для каждого бага? Скажем есть 100 багов на странице, у каждого в среднем по 10 комментариев и нельзя чтобы только изза того что надо показать колонку с циферкой количества комментариев проинициализировались 1000 объектов в памяти. Можно специально добавить поле к багу где это количество комментариев будет храниться, но это приведет к лишним операциям по поддержанию поля в актуальном состоянии, наверняка Spring позволяет решить эту проблему както изящнее. Кто-то что подобное уже делал? Буду благодарен за любые наводки |
| Автор: ecologist 3.4.2009, 20:36 |
| Можно попробовать сделать вычисляемое поле - смотри аннотацию @Formula - там можно просто задать SQL который будет вычислять это поле - вбиваем туда SELECT COUNT(*) FROM. Не буду гарантировать, что это точно поможет - но можно попробовать. |
| Автор: lando1 4.4.2009, 07:59 |
| по-моему все же лучше добавить дополнительное поле в бд, где хранить число постов. Это сильно ускорит процесс выдачи данных, иначе в вашем примере придется еще 100 раз вызвать (SELECT COUNT(*) FROM) |
| Автор: dimanenok 5.4.2009, 22:16 | ||
Большое спасибо за совет! Добавил вычисляемое поле 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 6.4.2009, 00:09 | ||
количество записей для каждого ID можно получить одним запросом SELECT ID, COUNT(*) FROM ... GROUP BY ID |