Как выбрать размер коллекции @OneToMany (mappedBy)) с помощью HQL - PullRequest
1 голос
/ 11 августа 2011

Сначала немного контекста и объяснения:

Я написал следующий запрос HQL:

select size(childGroups), size(ipts), g.id, g.name, g.status from LogicalGroup g where g.isRoot=true group by g.id, g.name, g.status

LogicalGroup - это сущность со скалярными полями: id, name, status, isRoot и двумя полями для сбора сущностей:

  • childGroups

, что является

@OneToMany(mappedBy = "parentGroup")<br> Set<LogicalGroup>

parentGroup - это другое поле в LogicalGroup,(Каждая группа содержит набор дочерних групп и родительскую группу).

и

  • ipts

, что составляет

@OneToMany(mappedBy = "logicalGroup")<br> Set<IPT>

каждый IPTимеет поле logicalGroup, обозначающее группу, к которой оно принадлежит.

Я хотел бы, чтобы запрос выполнял выбор размера коллекции childGroups и размера коллекции ipts, принадлежащейкорень LogicalGroup (где isRoot == правда).Существует только одна группа, для которой isRoot == true.

Логическая группа и IPT наследуют свои поля id от суперкласса AbstractEntity.Структура таблицы такова, что для каждого класса существует одна таблица (суперкласс также имеет свою собственную таблицу).Нет таблиц соединения для отношений между родительскими / дочерними логическими группами или логической группой / IPT.


Теперь вопрос:

Во-первых, я должен сказать, что запрос возвращает скалярправильные значения.

Проблема в том, что запрос появляется , чтобы вернуть размер LogicalGroup, установленный правильно, но, похоже, возвращает общее количество IPT с в IPT стол, а не только те, которые принадлежат LogicalGroup.Куда я иду не так?Что-то не так с запросом или, возможно, с отображением коллекций?

Я включил ведение журнала SQL, и Hibernate генерирует и выполняет следующее:

Hibernate: select count(childgroup1_.parentGroup_id) as col_0_0_, 
                  count(ipts2_.logicalGroup_id) as col_1_0_, 
                  logicalgro0_.id as col_2_0_, 
                  logicalgro0_.name >as col_3_0_, 
                  logicalgro0_.status as col_4_0_ from LogicalGroup logicalgro0_ 
           inner join AbstractEntity
                          logicalgro0_1_ on logicalgro0_.id=logicalgro0_1_.id, 
                      LogicalGroup childgroup1_, 
                      IPT ipts2_ 
           where 
                 logicalgro0_.id=childgroup1_.parentGroup_id and 
                 logicalgro0_.id=ipts2_.logicalGroup_id and 
                 logicalgro0_.isRoot=true 
           group by 
                 logicalgro0_.id , logicalgro0_.name , logicalgro0_.status
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...