#mysql #spring #jpql
#mysql #весна #jpql
Вопрос:
Итак, у меня есть три объекта
- Компания:
class Company{
List<City> cities;
List<Employ> employs;
}
- Город:
class City{
long id;
String name;
}
- Использовать:
class Employ{
long id;
String name;
}
Теперь я должен отфильтровать компании, в которых работают.name = x и имеет city.name = y,
Как мне это сделать, используя чистую форму любого JPQL или MySQL, было бы хорошо,
TIA
Ответ №1:
Иерархия классов не упоминает первичные и внешние ключи, но обычно вы моделируете ее с помощью первичного company_id в company, а для отношений 1: n внешний ключ company_id на многих (n) сторонах:
select company_id from company
where company_id not in (
select company_id from city where name = :x
union
select company_id from employee where name = :y
);
Комментарии:
1.Он отфильтровывает записи, где
employ.name = x
ИЛИcity.name = y
вместо И
Ответ №2:
Вот JPQL
запрос
select c from Company c
where
not exists(select 1 from c.employs emp where emp.name=:name) and
not exists(select 1 from c.cities city where city.name=:cityName)
Комментарии:
1. Это даст вам компании, но op не хотел их отфильтровывать?
2. Отредактировано @Allan WindI. Я неправильно понял вопрос
3. Я не думаю, что этот запрос вообще будет работать. Поскольку вложенные запросы не коррелированы, вы либо получаете все строки, либо вообще ничего.
4. @Allan WindI Запрос должен работать. Вложенные запросы коррелируются тем же
Company c
5. Коррелированный подзапрос означает, что выражение из внешнего запроса используется для выбора элементов подзапроса. Вы перемещаетесь по иерархии данных, возможно, это правильно, но это не реляционно. Из проблемы неясно, должно ли это быть «или» или «и» между двумя запросами. Мой ответ предполагает или и ваш и.