JPA оставила соединение для нахождения неиспользованных записей

Я уверен, что я глуп, но я, может казаться, не понимаю этого...

У меня есть две таблицы:

отдел (сделал, имя), сотрудник (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?

7
задан Pascal Thivent 4 August 2010 в 17:22
поделиться

1 ответ

Для того, чтобы делать то, что вы пытаетесь сделать, вам необходимо настроить отображение из раздела «Отделы» -> «Сотрудники» (используя ваши примеры сущностей). Вы можете использовать атрибут 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)
9
ответ дан 7 December 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: