想象一下,我有2个实体和那个查询:
select p, n.name
from ProductOffering p
left join ProductOfferingName n on (n.productOfferingId = p.productOfferingId and n.salesChannelId= :salesChannelId)
Hibernate将发出sql查询,其中包含来自n的p和name列的所有列,并返回Object []。 但是处理Object []并不是类型安全的,所以我会尝试使用"构造函数表达式":
select new com.peterservice.ccm.pom.internal.api.model.ProductOfferingResult(p, n.name)
from ProductOffering p
left join ProductOfferingName n on (n.productOfferingId = p.productOfferingId and n.salesChannelId= :salesChannelId)
使用该查询,Hibernate只选择p.id + n.name,并为每行发出" select * from ProductOffering p其中p.id =:id" (n + 1问题)
这种行为是正常的还是预期的?
答案 0 :(得分:0)
Try to change to "left join fetch":
select new com.peterservice.ccm.pom.internal.api.model.ProductOfferingResult(p, n.name)
from ProductOffering p
left join fetch ProductOfferingName n on (n.productOfferingId = p.productOfferingId and n.salesChannelId= :salesChannelId)