我有以下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>
,但是在上面的代码中,我也得到了批发商和它的连接。在我的结果中,我只想要问题、标题、杂志和条形码。我使用hibernate版本4.2.18.Final。如何只返回第一个对象图?我发现了一些关于CROSS JOIN ON的东西,但它只适用于Hibernate 5或更高版本,而且我无法切换,因为项目相当大并且依赖Java。
您只需要添加一个显式的SELECT i
子句。
作为旁注,如果批发商关联不存在,那么JOIN FETCH对于结果是没有意义的