У меня довольно простой 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!!