2010-11-19 1 views
4

У класса A отношение "один ко многим" относится к B. Следовательно, A имеет атрибут collectionOfB.JPA: прямое сопоставление размера коллекции с атрибутом, использующим count?

Есть ли способ сопоставить «счет B» с одним атрибутом в A?

Целью было бы предложить ярлык для извлечения числа связанных B s без загрузки всей коллекции. Иногда мне нужен только счет, т. Е. Размер коллекции. Я знаю, что могу выполнить запрос в отношении менеджера сущностей, который делает именно это. Однако, видя, что это сделал поставщик JPA, благодаря комментариям, конечно, было бы предпочтительнее.

+1

Я не знаю ни одного способа сделать это. Вам нужно просто написать запрос COUNT. –

+0

Просто понял, что это возможно с помощью формул Hibernate (http://docs.jboss.org/hibernate/core/3.5/reference/en/html/mapping.html#mapping-column), если вы готовы отказаться от JPA соблюдение. –

ответ

3

Я был в состоянии решить мою проблему с помощью экстра-ленивым отображения библиотеки Hibernate: http://www.frightanic.com/2010/11/21/extra-lazy-one-to-many-mapping-with-hibernate/

+0

Это хороший подход, поскольку он не требует больших усилий. Запрос count выполняется при вызове size() в коллекции. –

0

Насколько я знаю, это невозможно. Как вы уже сказали, выполните запрос для достижения этого, который не должен быть дорогим, если у вас нет сотен тысяч объектов B, и вы все равно можете кэшировать его и обновлять каждые x минут.

Решение, связанное с ошибкой, было бы иметь объект статистики с такими номерами.

+0

Проблема с записью запроса заключается в том, как используются наши сущности. Мы используем Dozer для автоматической сопоставления их с соответствующими DTO (передается обратно на уровень представления). –

+0

Итак, когда ADto имеет номер поляOfBs Dozer будет называть A # getNumberOfBs(). Обычно, в зависимости от аннотаций JPA в A, данные автоматически загружаются из хранилища данных, если они еще не присутствуют в A, л. Поскольку мы часто использовали разделенные DTO, такие как ADto и ASummaryDTO, DTO иногда нуждается в коллекции Bs, а иногда только numberOfB. Надеюсь, я смог объяснить это понятным образом ... –

Смежные вопросы