Критерии JPA — Как подготовить запрос SELECT IN

У меня есть довольно простой SQL-запрос, в котором мне нужно получить данные из родительской таблицы на основе запроса в другой дочерней таблице. Например:

Родительская таблица:

ID NAME
-- ----
22 Frederick
26 James
39 Robert

Дочерняя таблица:

PARENT_ID NAME
--------- ----
22        Joey
22        Cindy
26        Robbie
39        Joe

Поэтому мне нужен подобный SQL-запрос, который будет получать имена всех родителей, у которых есть ребенок с именем вроде Джо, то есть Фредерик и Роберт.

select NAME from PARENTS where ID in (
  select PARENT_ID from CHILDREN where NAME like '%Joe%'
);

Я пытаюсь что-то вроде этого:

Subquery<Child> childSubquery = criteriaQuery.subquery(Child.class);
Root<Child> childRoot = childSubquery.from(Child.class);
Predicate likeChild = criteriaBuilder.like(childRoot.get(Child_.name), '%Joe%');

Это дало бы мне детей с такими именами, как Джо.

Так как же мне тогда получить родителей этих детей?

На основе этот вопрос я пробовал так:

CriteriaQuery<Parent> parentQuery = criteriaBuilder.createQuery(Parent.class);
Root<Parent> parentRoot = parentQuery.from(Parent.class);
parentQuery.select(parentRoot);
parentQuery.where(likeChild);
parentQuery.getResultList() <--- this method doesn't exist in CriteriaQuery!!
stackoverflow.com/questions/42530677/…
Maciej Kowalski 04.02.2019 13:14

@MaciejKowalski Спасибо за ссылку .. Я действительно посмотрел на этот ответ, но не понял, как их сопоставить. Например, в этом ответе parentList просто жестко запрограммирован как массив. В моем случае parentList — это предикат из другого запроса.

Oscar Bravo 04.02.2019 14:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
78
0

Другие вопросы по теме