4

子オブジェクトを持つドメイン モデルのオブジェクトがあります。条件クエリを使用して、子のプロパティに基づいて注文するにはどうすればよいですか?

例えば:

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を使用しています。ありがとう!

4

1 に答える 1

13

エイリアスを追加するか、子のネストされた基準を作成する必要があります。NHibernate でこれを行う方法がわからない場合、Hibernate ではcreateCriteria()andcreateAlias()メソッドを介して行われます。次に、エイリアスを接頭辞として使用して並べ替えます。

Hibernate コード サンプルを更新します。

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

NHibernate では、プロパティ/エンティティ名が大文字になっていますが、非常に似ていると思います。NHibernate のドキュメントの例を次に示します。

于 2009-08-12T23:06:04.887 に答える