2017-04-06 1 views
0

Imaginez que j'ai 2 entités et cette requête:expression constructeur Hibernate HQL

select p, n.name 
    from ProductOffering p 
    left join ProductOfferingName n on (n.productOfferingId =  p.productOfferingId and n.salesChannelId= :salesChannelId) 

Hibernate fera requête sql avec tous colums de p et la colonne de nom de n et me retourner Object []. Mais face à l'objet [] est de type-safe, donc je vais essayer d'utiliser « l'expression constructeur »:

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) 

Avec cette requête Hibernate ne sélectionnez p.id + n.name et pour chaque ligne il émission "select * from ProductOffering p où p.id =: id" (n + 1 problème)

Ce comportement est-il normal et attendu?

Répondre

0

Essayez de changer à "gauche 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)