2009-08-12 5 views
4

Ich habe ein Objekt von meinem Domänenmodell, das ein untergeordnetes Objekt hat. Wie kann ich eine Kriterienabfrage verwenden, um basierend auf einer Eigenschaft des Kindes zu sortieren?Wie kann ich in (n) Hibernate auf einer Eigenschaft eines untergeordneten Objekts sortieren?

Zum Beispiel:

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; } 
} 

... 

// WORKS GREAT 
var orderedByName = _session.CreateCriteria<FooType>().AddOrder(Order.Asc("Name")).List(); 

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

Was brauche ich, um dieses Szenario zu aktivieren, zu tun? Ich benutze NHibernate 2.1. Vielen Dank!

Antwort

13

Sie müssen entweder einen Alias ​​hinzufügen oder ein verschachteltes Kriterium für Ihr Kind erstellen. Nicht sicher, wie dies in NHibernate zu tun, in Hibernate ist es über createCriteria() und createAlias() Methoden durchgeführt. Sie würden dann den Alias ​​als Präfix in der Reihenfolge nach verwenden.

aktualisieren Hibernate Codebeispiel:

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

ich in NHibernate vorstellen, wäre es ganz ähnlich sein, obwohl groß geschrieben mit Eigentum/Entitätsnamen. Hier ist an example von NHibernate-Dokumentation.

+0

Können Sie mir ein Codebeispiel geben? Ich bin mir nicht sicher, ob ich verstehe, was du meinst. –