如何在子对象的属性上使(n)休眠? [英] How can I sort in (n)hibernate on a property of a child object?

查看:68
本文介绍了如何在子对象的属性上使(n)休眠?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的域模型中有一个带有子对象的对象.如何使用条件查询根据孩子的属性进行订购?

I have an object from my domain model that has a child object. How can I use a criteria query to order based on a property of the child?

例如:

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.谢谢!

What do I need to do to enable this scenario? I'm using NHibernate 2.1. Thanks!

推荐答案

您需要为您的孩子添加别名或创建嵌套条件.不确定如何在NHibernate中执行此操作,在Hibernate中是通过createCriteria()createAlias()方法完成的. 然后,您可以按以下顺序使用别名作为前缀.

You need to either add an alias or create a nested criteria for your child. Not sure how to do this in NHibernate, in Hibernate it's done via createCriteria() and createAlias() methods. You would then use the alias as prefix in order by.

更新休眠代码示例:

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

我想在NHibernate中它会非常相似,尽管属性/实体名称是大写的.这是NHibernate的一个示例文档.

I imagine in NHibernate it would be quite similar, though with property/entity names uppercased. Here's an example from NHibernate documentation.

这篇关于如何在子对象的属性上使(n)休眠?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆