У меня есть три таблицы: «Пользователь», «Сотрудник» и «Рабочий». Таблица «Пользователь» имеет отношение «один к нулю или один» с «Работником» и то же отношение «один к нулю или один» с «Сотрудником». Бин сущности пользователя имеет следующие атрибуты отображения:
@OneToOne(cascade = CascadeType.ALL, mappedBy = "user")
private Worker worker;
@JoinColumn(name = "id_employee", referencedColumnName = "id")
@OneToOne
private Employee idEmployee;
Моя цель состоит в том, чтобы получить все записи "Пользователя", у которых один из этих атрибутов заполнен (не ноль). Я пытаюсь использовать запрос:
SELECT u FROM User u WHERE u.idEmployee IS NOT NULL OR u.worker IS NOT NULL
ORDER BY u.login
Я предполагаю получить 15 записей, но получаю только 6. Я разделил этот запрос на две отдельные части:
SELECT u FROM User u WHERE u.idEmployee IS NOT NULL ORDER BY u.login;
SELECT u FROM User u WHERE u.worker IS NOT NULL ORDER BY u.login;
Я получаю 9 и 6 записей соответственно. Собрать вместе - требуется 15 записей.
![screenshot of queries and result sets](https://i.stack.imgur.com/9qusw.jpg)
Похоже, "ИЛИ" сужает набор результатов только до тех записей, у которых рабочее поле не равно нулю. Почему это работает таким образом? Заранее спасибо.