就可以達到所需的結果(無N + 1) - 期貨,但不會是正確的NHibernate的功能。我們可以使用它們,但獲取many-to-one
實體的技巧在其他地方(見下文)。期貨如下陳述:http://ayende.com/blog/3979/nhibernate-futures平均:
...未來()和FutureValue()功能基本上作爲一種延遲查詢執行到以後的日子,在這一點的NHibernate將會對申請內容的詳細信息應該這樣做,並相應地進行優化
所以我們可以把更多的查詢放到一個批處理中。該查詢例如可以設定查詢導致:
因此撤回最大金額,在這種情況下,我們可以將「不同」類型的查詢放入Future
。
但是爲了取得many-to-one
沒有N + 1的實體 - 我們可以使用標準的Criteria API。所以,即使這些屬性被映射爲懶惰與選擇的獲取:
<many-to-one name="Account" class="FinanceAccount" column="AccountId"
lazy="proxy" fetch="select"/>
這個標準將只創建一個選擇左聯接:
var list = session.CreateCriteria<Cheque>()
.SetFetchMode("Account", NHibernate.FetchMode.Join)
.SetFetchMode("customer", NHibernate.FetchMode.Join)
.SetFetchMode("Branch", NHibernate.FetchMode.Join)
.Future<Cheque>()
// or
// .List<Cheque>() ... will be the same right now
;
這將導致只有一個SQL SELECT語句,加入Check及其引用屬性。
非常有意義 – frictionlesspulley