Группировка в спящем режиме - PullRequest
1 голос
/ 24 марта 2009

Я в процессе миграции старого "классического ASP" приложения на J2EE / Hibernate. У меня проблема со следующими типами операторов SQL:

SELECT parent.id, parent.name, parent.column1, count(child.id) AS no_of_children
FROM parent
INNER JOIN child ON child.parent_id = parent.id
GROUP BY parent.id, parent.name, parent.column1

Как мне выразить что-то подобное в HQL? Я попытался отобразить дочерние элементы как коллекцию (используя многие-к-одному) и получить количество дочерних элементов из размера коллекции, но затем Hibernate должен загрузить все «дочерние» сущности для каждого родителя отдельно.

Это приводит к выполнению около 1000 запросов к БД вместо 1 со всеми вытекающими проблемами с производительностью.

Есть ли способ обойти это?

Ответы [ 2 ]

1 голос
/ 25 марта 2009

Я бы попробовал что-то вроде следующего:

select parent.id, parent.name, parent.column1, count(child) 
from Parent parent 
join parent.Children as child 
group by parent.id, parent.name, parent.column1
0 голосов
/ 25 марта 2009

Перевод на HQL

FROM Parent GROUP BY Parent.id, Parent.name, Parent.column1

где Parent - это ранее смоделированная сущность. Предложение соединения определено в модели.

Что касается получения количества дочерних элементов, то для каждого родителя в отдельности попробуйте удалить все поля Lob в модели Child, поскольку они будут ограничивать скорость вашего приложения.

Надеюсь, что помог

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...