3
我有以下標準查詢(使用lambda擴展):NHibernate的 - 設置孫子提取模式對象
var workflowResult = repository.GetSession()
.CreateCriteria<Core.Domain.Application>()
.SetFetchMode<Core.Domain.Application>(app => app.ApplicationWorkflows, FetchMode.Join)
.SetResultTransformer(new DistinctRootEntityResultTransformer())
.Future<Core.Domain.Application>();
這是正常工作。每個應用程序都熱切地加載 ApplicationWorkflows集合。但是,我想更深入一個 並加載每個ApplicationWorkflow的ApplicationStatus對象。我 能做到這一點有以下HQL但是想轉換爲 標準:
var workflowQuery = "SELECT DISTINCT app" +
" FROM Application app" +
" JOIN FETCH app.ApplicationWorkflows awf" +
" JOIN FETCH awf.ApplicationStatus";
我一直建議使用以下,但我有它的問題在所有情況下工作:
.SetFetchMode<Core.Domain.Application>(app => app.ApplicationWorkflows[0].ApplicationStatus, FetchMode.Join)
您確定HQL有效嗎?我在過去曾嘗試過類似的東西,並且遇到了重複的問題。 'DistinctRootEntity'沒有做我期望的遞歸連接抓取。 – 2010-07-12 17:05:25
嗯,我以爲是的。讓我檢查確定。感謝您的領導! – 2010-07-12 17:31:32
[這個答案](http://stackoverflow.com/questions/5266180/fighting-cartesian-product-x-join-when-using-nhibernate-3-0-0/5285739#5285739)幫助我看看如何使用QueryOver和Future查詢可以在不返回重複項的情況下快速獲取子孫。該技術涉及將任務分解成單獨的SQL查詢,這些SQL查詢在數據庫的一個往返中執行。 – 2011-10-20 17:00:05