2010-12-01 20 views
0

NHibernate通常相當聰明,如果在查詢中不使用來自相關實體的字段,則多對一地省略連接。不過,我想這樣做就沒有再選擇其他表中的公式識別器,所以我做了一個自定義的留存與如何強制NHibernate總是進行多對一的連接

protected override string DiscriminatorFormulaTemplate 
{ 
    get { return this.DiscriminatorFormula; } 
} 

,並指定只在公式的列名(不過這列名是從相關表)

<discriminator formula="TypeID" /> 

我知道這通常容易出現名稱衝突,但在這種特定情況下,這不是問題。

所以現在我想強制相關的(many-to-one)表總是加入到主表中。做這個的最好方式是什麼?當HN檢測到某些字段被使用時,它會加入一些時間,但我不知道如何強制它一直這樣做。

回答

2
<many-to-one ... fetch="join"/> 

這包括Get,Criteria和延遲加載,但不包括HQL。

另一種選擇是使用自定義的SQL的所有操作,並選擇從一個子查詢,而不是表(與查詢裏面加入)

不幸的是,任何你在這一點上做的將是一個黑客。 NH設計的方式,鑑別器必須在同一個表中。

相關問題