2010-04-12 172 views
1

我有一個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的查詢。

任何想法?

感謝

回答

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

根據你的情況下,你可能還需要過濾重複的汽車,將被因取到SQL連接:

.SetResultTransformer(Transformers.DistinctRootEntity) 
2

和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