2010-01-12 38 views
0

這裏大致是我們的數據模型(實體名稱是假的,僅用於示例目的)。創建一個高效的(但複雜的)NHibernate查詢

產品發貨人有多對多的關係。 發貨人然後與倉庫有一個一對多的關係。

基本上是:產品有許多託運人其中有許多倉庫

我們有一個映射,從產品託運人倉庫託運人。但不是從託運人產品倉庫

我一直在試圖構建一個查詢,以返回(現在只的計數)所有倉庫這些都與一個特定的產品

第一次嘗試:從產品獲得託運人的列表。創建了一個查詢倉庫其中託運人是我們的設置。這有效,但這是兩個疑問。我們需要它是一個查詢。

回答

0

原來你需要從託運人產品的映射,使這項工作。但沒關係,只要將其設爲無訪問權的「僅限查詢」屬性即可。

然後,它的作爲做子選擇簡單:

var subcriteria = DetachedCriteria.For<Shipper>() 
       .CreateCriteria("Products", "productsForCategory") 
       .Add(Property.ForName("productsForCategory.Id").Eq(product.Id)) 
       .SetProjection(Projections.Id()); 

然後把那IN其他查詢:

Session.CreateCriteria<Warehouse>() 
       .Add(Subqueries.PropertyIn("Shipper", subcriteria)) 
1

有點像?

from warehouse w 
where w.Shipper in 
    (select p.shippers from product p where p.id = 2) 
+0

本質上是肯定的。但是如何使用Criteria API來構建呢? –

+0

無法幫到你,我一直堅持HQL格式,因爲我發現它更強大,更容易預測SQL最終會到達數據庫。 –