寻找相关对象的相关对象的NHibernate查询

问题描述:

我有一个nHibernate查询问题,看起来很直截了当,但我似乎无法得到我的头!寻找相关对象的相关对象的NHibernate查询

我创造了一些简单的示例类来说明我的问题:

public class Car { 
    public int Id { get; set; } 
    public IList<Interior> InteriorParts { get; set; } 
} 

public class Interior { 
    public int Id { get; set; } 
    public InteriorProducer Producer { get; set; } 
} 

public class InteriorProducer { 
    public int Id { get; set; } 
} 

我们查询:我InteriorProducer的ID,但需要得到汽车的列表,其中内部已产生由内部生产商。

因此,在一个简单的,伪SQL,它看起来是这样的:

select cars 
where car.InteriorParts.Producer.Id = Id 

我有一个很艰难的时间让我的头围绕它来创建一个NHibernate的查询。

任何想法?

感谢

var cars = session 
    .CreateCriteria<Car>() 
    .CreateAlias("InteriorParts", "parts") 
    .CreateAlias("parts.Producer", "producer") 
    .Add(Expression.Eq("producer.Id", id)) 
    .List(); 

根据你的情况下,你可能还需要过滤重复的汽车,将被因取到SQL连接:

.SetResultTransformer(Transformers.DistinctRootEntity) 

和HQL ...

var query = session.CreateQuery 
    ("select c from Cars c where c.InteriorParts.Producer.Id = :pid"); 
query.SetInt32("pid", producerId); 
IList<Car> cars = query.List<Car>(); 
+0

thx moo,忘记标记正确 – Jaguar 2010-04-12 08:33:07