2009-08-12 60 views
4

我有一个从我的域模型有一个子对象的对象。我如何使用标准查询来根据孩子的财产进行订购?如何在(n)hibernate中排序子对象的属性?

例如:

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(); 

什么我需要做的,使这种情况?我使用的是NHibernate 2.1。谢谢!

回答

13

您需要为您的孩子添加别名或创建嵌套标准。不知道如何在NHibernate中做到这一点,休眠它是通过createCriteria()createAlias()方法完成的。 然后,您将按顺序将别名用作前缀。

更新 Hibernate代码示例:

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

我NHibernate的想像这将是非常相似的,但财产/实体名称大写。这里是来自NHibernate文档的an example

+0

你能给我一个代码示例吗?我不确定我明白你的意思。 – 2009-08-12 23:19:32