情況: 我有一個類MyClass的和它的「輕量級」版本MyClassLite,所以我有NHibernate的基類和派生類映射
public class MyClass : MyClassLite
我也用HBM文件映射我的課(它們映射到同一張表)。 的事情是,當我試圖讓MyClassLite實體的名單,我得到的不僅MyClassLite實體,但MyClass的名單實體此外。我怎麼能擺脫這一點?
情況: 我有一個類MyClass的和它的「輕量級」版本MyClassLite,所以我有NHibernate的基類和派生類映射
public class MyClass : MyClassLite
我也用HBM文件映射我的課(它們映射到同一張表)。 的事情是,當我試圖讓MyClassLite實體的名單,我得到的不僅MyClassLite實體,但MyClass的名單實體此外。我怎麼能擺脫這一點?
如果您在映射或查詢中爲列表配置預加載,您將獲得MyClass實現。
在條件查詢:
Criteria.SetFetchmode("MyClassListProperty", Fetchmode.Eager)
在HQL查詢:
left join fetch MyClassListProperty
在映射文件:
<set [...] lazy="false"> ...
究竟是該ClassLite?爲什麼你的類繼承自ClassLite?這裏真的有'IS-A'的關係嗎?
ClassLite存在的原因是什麼?它是一個你使用什麼類的時候,例如,你必須顯示'類'實例的概述? 然後,如果是這種情況,你應該看看DTO或'Views',Projections和AliasToBeanEntityResultTransformer。
這不合乎邏輯嗎? MyClass是MyClassLite的子類,所以任何MyClass實例也是MyClassLite的實例。 如果你想擺脫它們,改變你的繼承層次結構。例如。引入一個基類並創建MyClass和MyClassLite的子類。 – 2009-10-09 09:32:39
它看起來很符合邏輯,但我想知道是否有任何選項,可能在hbm文件中,以防止檢索派生實例。必須有東西.. – npeBeg 2009-10-09 10:42:32
你是如何查詢這張表的MyClassLite列表? – 2009-10-09 15:58:16