Hibernate ПРИСОЕДИНЯЙТЕСЬ, если не существует никакого отношения

У меня есть объект Customer с дочерними элементами @OneToMany. Я хочу выполнить соединение для извлечения, чтобы вернуть клиента с его соответствующими активными учетными записями (с учетом account.isActive = true). Если у клиента нет учетных записей, он также должен быть возвращен.

Для следующего JPQL для клиента, имеющего неактивные учетные записи, они действительно отфильтрованы, но клиент без учетных записей не возвращается:

   @NamedQuery(name = "Customer.findById", query = "SELECT c FROM Customer c LEFT JOIN FETCH c.accounts a WHERE c.id = :id AND a.isActive=true")

Каким будет чистый способ написать запрос, чтобы оба случая были охвачены (клиент без учетных записей и клиент с активными учетными записями)?

hibernate,join,where,fetch,

0

Ответов: 2


0

Используйте внутренний запрос:

select c FROM Customer c LEFT JOIN FETCH (select a from accounts a WHERE a.isActive=true) WHERE c.id = :id

0 принят

Итак, в основном, отвечая на мой собственный вопрос - решение было довольно простым:

 @NamedQuery(name = "Customer.findById", query = "SELECT c FROM Customer c LEFT JOIN FETCH c.accounts a WHERE c.id = :id AND (a is null OR a.isActive=true)")
спящий режим, присоединиться, где, принеси,
Похожие вопросы
Яндекс.Метрика