我正在嘗試加載我選擇的實體的子集合的子集合。我試圖模仿this way這樣做,基本上創建了兩個未來的查詢,然後枚舉其中的一個。這應該導致對數據庫的兩個查詢:在Future和HQL的幫助下,急切地加載子集合
var idd = session.CreateQuery("from ItemDeliveryDetail idd " +
"join fetch idd.ItemDelivery " +
"left join fetch idd.SupplierInvoice " +
"where idd.Id = 21931828")
.Future<ItemDeliveryDetail>();
var spc = session.CreateQuery("from SpecialCondition spc " +
"where spc.ItemDelivery " +
"in (select idd.ItemDelivery " +
"from ItemDeliveryDetail idd " +
"where idd.Id = 21931828)")
.Future<SpecialCondition>();
var result = idd.ToList();
最後一行確實導致對數據庫的兩個查詢。查詢正是我期望的(他們相當冗長,我不認爲他們與問題有關,但如果你想看到他們,我粘貼他們here)。
問題是,這兩個查詢的結果沒有被組合,即下面列舉仍然將查詢的SpecialCondition
s分別ItemDelivery
的數據庫:
foreach (var itemDeliveryDetail in result)
{
foreach (var specialCondition in itemDeliveryDetail.ItemDelivery
.SpecialConditions)
{
// Do something
}
}
如何解決呢?
你不需要3個查詢嗎?一個獲得ItemDeliveryDetail,一個獲得ItemDelivery,一個獲得SpecialConditions? – MerickOWA 2011-12-15 16:07:53
我不這麼認爲,因爲我急於在ItemDeliveryDetail查詢中獲取ItemDelivery。 – 2011-12-15 16:18:38
@MerickOWA:但可以肯定的是,我只是對它進行了測試 - 它確實不會改變任何事情。 – 2011-12-15 16:42:29