我如何 return 只有 HQL 交叉连接中的第一个对象?
How do I return only the first object in an HQL cross join?
我有以下HQL
from
com.kable.web.allotment.model.Issue i
inner join fetch i.title
inner join fetch i.title.magazine
inner join fetch i.barcodes bcs
, Wholesaler w
LEFT join fetch w.localCurrencies c
inner join fetch w.location
where
w.id = :wholesalerId
and i.title.id = :titleid
and i.distributionStatus = :status
and (
(
i.distributionDate is null
and i.onSaleDate >= TRUNC(CURRENT_DATE)
)
or i.distributionDate >= TRUNC(CURRENT_DATE)
)
and bcs.type.id = w.location.id
and (bcs.localCurrency.id = c.localCurrencyType.id OR c.localCurrencyType.id IS NULL)
and i.onSaleDate BETWEEN COALESCE(c.effectiveDate, i.onSaleDate) and COALESCE(c.expirationDate, i.onSaleDate)
order by
i.distributionDate
, i.onSaleDate
我之前编写的所有代码都希望得到 List<Issue>
返回,但是使用上面的代码,我也得到了批发商及其连接。在我的结果中,我只需要 Issue、Title、Magazine 和 Barcodes。我正在使用休眠版本 4.2.18.Final。我如何只 return 第一个对象图?我发现了一些关于 CROSS JOIN ON 的东西,但它只适用于 Hibernate 5 或更高版本,我无法切换,因为项目非常大并且 Java 依赖项。
您只需添加一个明确的 SELECT i
子句。
附带说明一下,如果批发商协会的 JOIN FETCH 无论如何都不会出现在结果中,它就没有意义
我有以下HQL
from
com.kable.web.allotment.model.Issue i
inner join fetch i.title
inner join fetch i.title.magazine
inner join fetch i.barcodes bcs
, Wholesaler w
LEFT join fetch w.localCurrencies c
inner join fetch w.location
where
w.id = :wholesalerId
and i.title.id = :titleid
and i.distributionStatus = :status
and (
(
i.distributionDate is null
and i.onSaleDate >= TRUNC(CURRENT_DATE)
)
or i.distributionDate >= TRUNC(CURRENT_DATE)
)
and bcs.type.id = w.location.id
and (bcs.localCurrency.id = c.localCurrencyType.id OR c.localCurrencyType.id IS NULL)
and i.onSaleDate BETWEEN COALESCE(c.effectiveDate, i.onSaleDate) and COALESCE(c.expirationDate, i.onSaleDate)
order by
i.distributionDate
, i.onSaleDate
我之前编写的所有代码都希望得到 List<Issue>
返回,但是使用上面的代码,我也得到了批发商及其连接。在我的结果中,我只需要 Issue、Title、Magazine 和 Barcodes。我正在使用休眠版本 4.2.18.Final。我如何只 return 第一个对象图?我发现了一些关于 CROSS JOIN ON 的东西,但它只适用于 Hibernate 5 或更高版本,我无法切换,因为项目非常大并且 Java 依赖项。
您只需添加一个明确的 SELECT i
子句。
附带说明一下,如果批发商协会的 JOIN FETCH 无论如何都不会出现在结果中,它就没有意义