Я уверен, что я глуп, но я, может казаться, не понимаю этого...
У меня есть две таблицы:
отдел (сделал, имя), сотрудник (eid, во-первых, в последний раз, сделал),
у них есть соответствующие объекты, JPA управлял Отделом объектов и Сотрудником. У сотрудника есть поле Deparment, Отдел не ведет список Сотрудника. Что я хочу сделать, хотя находка все Отделы, которые не имеют никаких Сотрудников. Используя простой SQL это легко с левым соединением:
SELECT d.*
FROM department as d LEFT OUTER JOIN employee as e
ON d.did = e.did
WHERE e.did IS NULL
Я не вижу, как перевести этот запрос в JPQL все же. Все примеры, которые я нашел для JPQL оставленный соединения, пересекают ссылку другой путь, например.
SELECT e FROM Employee e LEFT JOIN e.departmert d
Принимая во внимание, что мне нужно что-то больше как
SELECT d FROM Department d LEFT JOIN d.???? WHERE e.department IS NULL
но отдел не поддерживает ссылку на, он - сотрудники (в моем приложении, это не отделы и сотрудники, очевидно). Это даже возможно в JPQL?
Для того, чтобы делать то, что вы пытаетесь сделать, вам необходимо настроить отображение из раздела «Отделы» -> «Сотрудники» (используя ваши примеры сущностей). Вы можете использовать атрибут mappedBy
для @OneToMany
, который, скорее всего, не нарушит вашу схему, например,
@Entity
class Department {
...
@OneToMany(mappedBy="employee")
Collection<Employee> getEmployees() {
....
}
...
}
Это позволит вам запустить что-то вроде:
SELECT d FROM Department d WHERE d.employees IS EMPTY
Что должно даст вам эквивалентные результаты.
Не меняя сопоставления, вы сможете выполнить что-то вроде этого запроса, чтобы получить желаемые результаты:
SELECT d from Department d WHERE NOT EXIST (SELECT e FROM Employee e where e.department = d)