Мне нужно выбрать компании из базы данных с их активными адресами (address.address_status_id = 1). Если адрес неактивен, столбцы адресов должны содержать нули.Подзапрос в соединении
Следующий запрос делает именно то, что я хочу:
select c.id, c.name, a.id, a.street
from company c
left join
(select * from address where address_status_id = 1) a
on c.id = a.company_id
Я попробовал это в Java/QueryDSL:
JPAQuery query = new JPAQuery(entityManager);
query = query.from(qCompany);
query = query.leftJoin(company.addresses, new JPASubQuery().from(qAddress)
.where(qAddress.addressStatusId.eq(AddressStatuss.ACTIVE.asBigDecimal())).list(qAddress));
Однако JPA (и, следовательно, JPAQuery в QueryDSL) не поддерживает a subquery in a JOIN clause
Есть ли способ перефразировать инструкцию SQL, чтобы она могла быть выражена в JPA/QueryDSL?
Редактировать: Мы используем Oracle DB и Hibernate JPA-провайдера, если это имеет значение.
Ой, мы используем версию 2.9, и метод ON в нем, похоже, не существует. Я вижу, что это в 3.2.0. в JPAQueryBase. Мы попытались обновить некоторое время назад, но отложили его, увидев количество изменений, которые должны быть внесены для компиляции нашего кода. Может быть, метод ON заменил метод WITH? –
Да, с (a.addressStatusId.eq (1)) делает именно то, что я хотел! –
Да, 'on' заменен' на'. –