Есть ли в JPQL нулевое безопасное выражение? - PullRequest
1 голос
/ 19 апреля 2019

В следующем запросе JPQL:

SELECT NEW com.java2s.common.EmployeeDetails(e.name, e.salary, e.department.name) FROM Employee e

как я могу передать null в конструктор (в качестве третьего аргумента), если e.department равен null?

Думаю, e.department.name приведет к исключению, если e.department равно null?

1 Ответ

1 голос
/ 19 апреля 2019

Я полагаю, что e.department.name приведет к исключению, если e.department имеет значение null?

Нет.e.department.name делает неявное внутреннее соединение между таблицами Employee и Departement.Поэтому, если у сотрудника нет какого-либо отдела, он даже не будет возвращен по запросу.

Если вы хотите, чтобы сотрудники без отдела выбирались, вам нужно left join:

select new com.java2s.common.EmployeeDetails(e.name, e.salary, d.name)  
from Employee e
left join e.department d

Приведенный выше запрос вернет имя и зарплату сотрудника, а NULL - название отдела, если у сотрудника нет отдела.

Примечание: экспериментирование - это действительно хороший способ преобразования догадок в факты.Почему бы вам не попробовать этот запрос, а не угадать, что он будет делать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...