Arhn - архитектура программирования

Спящий режим — более одной строки, возвращаемой подзапросом, используемым в качестве выражения

У меня есть сценарий для извлечения информации из трех (Table1, Table2, Table4) таблиц на основе общего идентификатора Table1

Для извлечения информации из таблицы 4 я должен искать в другой промежуточной таблице (таблице 3) общий идентификатор между таблицей 3 и таблицей 4. Результат запроса информации таблицы 4 будет содержать более одной строки в качестве ответа на запрос.

Я написал следующий HQL (Hibernate Query) для своего требования

select t1,t2,(select t4.column1 from Table4 t4 
join Table3 t3 on t4.column0=t3.column0 and t3.column1=t1 and t3.column2='desired_value') from Table1 t1 
join Table2 t2 on t2.column1=t1.column1 
where t1.column0=:id and t1.column3=:value

У меня есть классы сущностей для всех четырех таблиц.

Как я могу выбрать несколько строк из подзапроса

Что эквивалентно методу POSTGRESQL array_agg()/string_agg() в Spring Data JPA?

Без подзапроса я могу получить ответ Object[] с объектами класса Entity.

Как я могу добавить свой подзапрос, чтобы получить все нужные мне данные в одной транзакции, не создавая отдельный метод запроса в моем классе репозитория?

Что я пробовал до сих пор:

select t1,t2,(select new List(t4.column1) from Table4 t4 
join Table3 t3 on t4.column0=t3.column0 and t3.column1=t1 and t3.column2='desired_value') from Table1 t1 
join Table2 t2 on t2.column1=t1.column1 
where t1.column0=:id and t1.column3=:value

Ниже приведен объект вывода, которого я пытаюсь достичь:

List<Object[]> as my query response 

         where each Object[] will be of size 3 with following

                 Object[0] -> Table1_Entity object
                 Object[1] -> Table2_Entity object
                 Object[2] -> will be a String[] containing a specific column values from Table4 Entity class

то есть ответ = [[obj1, obj2, [value1, value2, value3]], [obj3, obj4, [value1, value2, value3]], ......]


  • JPA/Hibernate не поддерживает string_agg или array_agg, так как обе эти функции характерны для Postgres, но не для других баз данных. Если вам нужен обходной путь, вы можете добавить образцы данных, а также показать нам результат, которого вы пытаетесь достичь. 19.04.2021
  • @TimBiegeleisen Пожалуйста, найдите мой ожидаемый пример данных ответа 19.04.2021

Ответы:


1

Попробуй это:

select t1,t2, (select cast(function('string_agg', t4.column1, ', ') as string) from Table4 t4 
join Table3 t3 on t4.column0=t3.column0 and t3.column1=t1 and t3.column2='desired_value') from Table1 t1 
join Table2 t2 on t2.column1=t1.column1 
where t1.column0=:id and t1.column3=:value
19.04.2021
  • Я попытался, но получил следующее исключение синтаксиса запроса. Вызвано: org.hibernate.QueryException: нет типа данных для узла: org.hibernate.hql.internal.ast.tree.MethodNode \-[METHOD_CALL] MethodNode: 'function (string_agg)' + -[METHOD_NAME] IdentNode: 'string_agg' {originalText=string_agg} \-[EXPR_LIST] SqlNode: 'exprList' 20.04.2021
  • Большое спасибо за быстрый ответ. Позвольте мне попробовать новое редактирование и дать обновление 20.04.2021
  • Я все еще получаю ту же ошибку 20.04.2021
  • Мех, приведение должно быть вокруг выбранного элемента в подзапросе. Обновлено снова. 20.04.2021
  • Ооо это работает! Вы сэкономили мое время! Большое спасибо :) 21.04.2021
  • Не могли бы вы взглянуть на stackoverflow.com/questions/67192574/ и помогите мне 21.04.2021
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..