如何在HQL交叉连接中只返回第一个对象?



我有以下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对于结果是没有意义的

最新更新