Получить массив элементов, используя подзапрос в критериях - PullRequest
0 голосов
/ 01 ноября 2019

Я работаю над проектом с Hibernate 5.2. У меня есть требование для формирования сложного запроса. Я сформировал его, и он содержит следующее в выбранной части SELECT ARRAY(select type from tableA where fkid=tableB.id) as "type". Когда я попробовал это в режиме гибернации, я смог сформировать подзапрос typeSubQuery с запросом в скобках массива, но в criteriaquery.select() я могу сделать только typeSubQuery.getSelection().alias("type"). Это возвращает только одно логическое значение, но подзапрос внутри может возвращать или не возвращать более одного значения. По этой причине мы выбрали ARRAY() в собственном запросе.

Подзапрос:

Subquery<Boolean> typeSubquery = cq.subquery(Boolean.class);
Root<TableB> typeroot = typeSubquery.from(TableB.class);
Join<TableB, TableA> typeSubJoin = typeroot.join(TableB_.tableA);
typeSubquery.select(typeroot.get(TableB_.type));
typeSubquery.where(cb.equal(tableAJoin.get(TableA_.id), typeSubJoin.get(TableA_.id)));

Выбор критерия запроса:

cq.select(cb.construct(DtoObject.class, typeSubquery.getSelection().alias("type")

Таблица A и таблица B имеют отображение один ко многим.

Я не могу понять, как извлечь тип в виде массива в спящем режиме.

...