4 votes

Comment puis-je trier dans (n)hibernate sur une propriété d'un objet enfant?

J'ai un objet de mon modèle de domaine qui a un objet enfant. Comment puis-je utiliser une requête de critères pour ordonner en fonction d'une propriété de l'enfant?

Par exemple:

class FooType
{
    public int Id { get; set; }
    public string Name { get; set; }
    public BarType Bar { get; set; }
}

class BarType
{
    public int Id { get; set; }
    public string Color { get; set; }
}

...

// FONCTIONNE BIEN
var orderedByName = _session.CreateCriteria().AddOrder(Order.Asc("Name")).List();

// LANCE "could not resolve property: Bar.Color of: FooType"
var orderedByColor = _session.CreateCriteria().AddOrder(Order.Asc("Bar.Color")).List();

Que dois-je faire pour activer ce scénario? J'utilise NHibernate 2.1. Merci!

13voto

ChssPly76 Points 53452

Vous devez soit ajouter un alias, soit créer un critère imbriqué pour votre enfant. Je ne suis pas sûr comment faire cela en NHibernate, en Hibernate, cela se fait via les méthodes createCriteria() et createAlias(). Vous utiliseriez ensuite l'alias comme préfixe pour le critère de tri.

Mise à jour de l'échantillon de code Hibernate:

Criteria criteria = session.createCriteria(FooType.class);
criteria.createAlias("bar", "b");
criteria.addOrder(Order.asc("b.color"));

J'imagine que en NHibernate, ce serait assez similaire, bien que avec les noms de propriété/entité en majuscules. Voici un exemple de la documentation de NHibernate.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X