2009-10-09 126 views
0

情況: 我有一個類MyClass的和它的「輕量級」版本MyClassLite,所以我有NHibernate的基類和派生類映射

public class MyClass : MyClassLite 

我也用HBM文件映射我的課(它們映射到同一張表)。 的事情是,當我試圖讓MyClassLite實體的名單,我得到的不僅MyClassLite實體,但MyClass的名單實體此外。我怎麼能擺脫這一點?

+0

這不合乎邏輯嗎? MyClass是MyClassLite的子類,所以任何MyClass實例也是MyClassLite的實例。 如果你想擺脫它們,改變你的繼承層次結構。例如。引入一個基類並創建MyClass和MyClassLite的子類。 – 2009-10-09 09:32:39

+0

它看起來很符合邏輯,但我想知道是否有任何選項,可能在hbm文件中,以防止檢索派生實例。必須有東西.. – npeBeg 2009-10-09 10:42:32

+0

你是如何查詢這張表的MyClassLite列表? – 2009-10-09 15:58:16

回答

0

如果您在映射或查詢中爲列表配置預加載,您將獲得MyClass實現。

在條件查詢:

Criteria.SetFetchmode("MyClassListProperty", Fetchmode.Eager) 

在HQL查詢:

left join fetch MyClassListProperty 

在映射文件:

<set [...] lazy="false"> ... 
1

究竟是該ClassLite?爲什麼你的類繼承自ClassLite?這裏真的有'IS-A'的關係嗎?

ClassLite存在的原因是什麼?它是一個你使用什麼類的時候,例如,你必須顯示'類'實例的概述? 然後,如果是這種情況,你應該看看DTO或'Views',Projections和AliasToBeanEntityResultTransformer。