データベースから会社をアクティブなアドレス (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 (およびその結果として QueryDSL の JPAQuery) は、JOIN 句でのサブクエリをサポートしていません。
JPA/QueryDSLで表現できるようにSQL文を言い換える方法はありますか?
編集: 違いがある場合は、Oracle DB と Hibernate JPA プロバイダーを使用しています。