2010-01-25 22 views
0

我對Hibernate還是一個新手,並且試圖將它用於我已經繼承的網站。不幸的是,這意味着有時db模式並不總是有意義的。NHibernate:如何使用Criteria API排除屬於連接的一部分的類

雖這麼說,我想建立一個使用標準API以下HQL查詢

from TableB b where b.id = :id and b.TableAProperty.UserId = :userId 

以上HQL語句生成SQL將選擇並返回表B只有這正是我希望發生的。但是,使用下面顯示的Critera API語句,生成的SQL語句將爲TableB和TableA選擇字段。

DataProvider.Session 
    .CreateCriteria<TableB>() 
    .Add(Expression.Eq("Id", id)) 
    .CreateCriteria("TableA") 
    .Add(Expression.Eq("UserId", userId)) 
    .UniqueResult<TableB>() 
    ; 

在一個完美的世界中,我可以更新數據庫模式,使更多的意義,但唉,我不能。任何幫助,將不勝感激。

回答

2

你的問題沒有顯示與TableA和TableB相關的類,所以我將假設這些類是TableA和TableB,並且TableB有一個名爲TableA的屬性。

DataProvider.Session 
    .CreateCriteria<TableB>() 
    .Add(Expression.Eq("Id", id)) 
    .CreateAlias("TableA", "a") 
    .Add(Expression.Eq("a.UserId", userId)) 
    .UniqueResult<TableB>(); 
+0

您的假設是正確的。 – rmblstrp 2010-01-25 21:26:49

相關問題