join中的java子查询
我需要从数据库中选择具有活动地址(address.address\u status\u 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)不支持a subquery in a JOIN clause
有没有一种方法可以重新表述SQL语句,以便它可以用JPA/QueryDSL表示
编辑:如果Oracle DB和Hibernate JPA提供程序有所不同,我们将使用它们
# 1 楼答案
也许像这样
在Querydsl
# 2 楼答案
我会使用OracleDBJDBC。你可以得到here
根据您是尝试构建小程序还是应用程序,您必须在JDBC的tiny版本和OCI版本之间进行选择。关于该here的更多信息
我将假设您正在构建一个应用程序,因此在本例中我将使用OCI
希望这对你有所帮助
问候,, 安迪