Я работаю над проектом с 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 имеют отображение один ко многим.
Я не могу понять, как извлечь тип в виде массива в спящем режиме.