Динамическое получение нескольких данных на основе полученных ранее данных через собственный запрос - PullRequest
0 голосов
/ 18 июня 2020

У меня есть три таблицы, то есть Order, Item и ItemValues ​​с Order и Item как отношения один ко многим аналогично значениям item и item. В пользовательском интерфейсе элемент - это имя поля, а значения элемента - это раскрывающиеся списки имени этого поля.

Таблица заказа

id 
1 
2
3

Таблица позиций

Name          id    orderid
ExamCategory   1      1
Exam           2      1
Stage          3      1

Таблица значений позиций

Name          level  parentLevel  itemId 
Banking        1         0           1
Army           2         0           1
Navy           3         0           1
SBI PO         1         1           2
HDFC PO        2         1           2
Preliminary    1         1           3

Подводя итог, есть три поля: Категория экзамена, экзамен и этап с Банковское дело, Армия и Флот - это выпадающие значения для Категории экзамена. Уровень соответствует порядку, в котором они появляются, а родительский уровень означает, что это самые верхние раскрывающиеся значения полей.

Мне нужно получить данные из базы данных с помощью собственного запроса Spring, так что если я выбрал категорию экзамена как Банковское дело в первом поле все дочерние поля должны отображать только связанные с ним раскрывающиеся значения. (например, банковское дело для экзаменационной категории, SBI PO, HDF C PO для экзамена, и если я выбрал SBI PO, тогда только предварительный этап, как это, он может go on). Поскольку это может быть огромное json, при каждом щелчке мне нужно вызывать db и получать только соответствующие данные.

Я пытаюсь получить данные на основе orderId, itemlevel и itemValueLevel. Мне нужно получить все элементы, которые превышают текущий уровень, и все значения элементов, которые имеют текущее значение itemValue как parentLevel (с этой частью я изо всех сил пытаюсь справиться как сравнение itemValue и parentLevel, которое я могу сделать только для следующего поля. После что мне нужно использовать значения первых полученных результатов для определения следующей строки). Как я могу добиться этого динамически. SQL запрос тоже подойдет. Любая помощь приветствуется. Приносим извинения за длинное объяснение, поскольку я борюсь с тем, как идеально представить проблему, с которой я столкнулся.

itemEntity = entityManager
                    .createQuery(
                            "select i from Item i left outer join fetch i.ItemValues iv "
                                    + "where i.orderId = :orderId and i.level> : reqLevel and iv.parentLevel = :parentLevel",Item.class)
...