J'utilise NHibernate pour une application Web. J'ai un modèle comme celui-ci:Sous-requête pour récupérer une propriété NHibernate
public class ProductViewModel {
public virtual int Id { get; set; }
/* others simple properties */
public virtual IList<OfferViewModel> LastOffers { get; set; }
public ProductViewModel() { }
}
public class OfferViewModel {
public virtual string UserName { get; set; }
public virtual decimal Prince { get; set; }
public OfferViewModel() { }
}
Je voudrais savoir, comment récupérer la propriété de collection « LastOffers » avec un sous-requête HQL? Je veux aller le chercher avec les 10 dernières offres. J'ai ma maquette mappée correctement mais je ne connais pas le sintaxe pour faire une sous-requête récupérer cette propriété.
Aujourd'hui, je suis en utilisant une commande comme ceci pour aller chercher mes ViewModel:
public IList<ProductViewModel> GetProductsForSalles()
{
return
Session.CreateQuery(@"select p.Id as Id,
p.Name as Name,
p.Price as Price,
p.Price as Date
/* FETCH LastOffers? */
from Product p
where p.Active=true and (p.Status=:Status)
order by a.Date asc")
.SetParameter("Status", Status.Started)
.SetMaxResults(50)
.SetResultTransformer(Transformers.AliasToBean<ProductViewModel>())
.List<ProductViewModel>();
}
Merci!
Bonjour Génie, Merci pour l'awser. En fait, DistinctRootEntityResult doit résoudre mon problème :), mais est-il possible d'extraire la propriété avec les 10 premiers enregistrements et d'ordonner par id desc? Je veux que cela améliore la performance, car j'aurai beaucoup d'offres par produit. Merci encore! –
@Felipe, je n'ai jamais utilisé cette fonctionnalité, mais AFAIK il est soutenu par NH. Essayez de jouer avec le paramètre fetchmode dans un fichier HBM de votre entité. – Genius