2009-11-07 199 views
1

我使用nhibernate子類映射來處理系統對象的描述。基本的想法是有一個描述類,並通過具有特定於該對象的子類來進行多態關聯。我的代碼將描述數據正確插入數據庫;這意味着我在插入數據時正確創建了ownerid和ownertype列。Nhibernate子類映射問題

但是,當我使用nhibernate.load()加載Foo對象時,nhibernate沒有使用OwnerType列來查詢Foo的描述 - 它僅僅使用ownerId列查詢描述表,因爲可能有其他行該表具有相同的id但與不同的ownertype關聯。

你能幫我找到它爲什麼不包含ownerType的負載查詢描述,我該如何解決這個問題?謝謝!

public class Product : EntityBase 
{ 
    public virtual string Name { get; set; } 
    public virtual IList<ProductDescription> Descriptions { get; set; } 
} 

public class ProductDescription : Description 
{ 
    public virtual Product Product { get; set; } 
} 

public class Description : EntityBase 
{ 
    public virtual string Name { get; set; } 
    public virtual string ShortDescription { get; set; } 
    public virtual string LongDescription { get; set; } 
} 


<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Test.Domain" assembly="Test.Domain"> 
    <class name="Test.Domain.Product, Test.Domain" table="Products"> 
     <id name="ID" column="ID" type="Int32" unsaved-value="0"> 
      <generator class="native" /> 
     </id> 

     <property name="Name" /> 

     <bag name="Descriptions" inverse="true" cascade="all"> 
      <key column="OwnerID" /> 
      <one-to-many class="Test.Domain.ProductDescription, Test.Domain" /> 
     </bag> 
    </class> 
</hibernate-mapping> 

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Test.Domain" assembly="Test.Domain"> 
<class name="Test.Domain.Description, Test.Domain" table="Descriptions" discriminator-value="0"> 
     <id name="ID" column="ID" type="Int32" unsaved-value="0"> 
      <generator class="native" /> 
     </id> 

     <discriminator column="OwnerType" /> 

     <property name="Name" /> 
     <property name="ShortDescription" /> 
     <property name="LongDescription" /> 

     <subclass name="Test.Domain.ProductDescription, Test.Domain" discriminator-value="1"> 
      <many-to-one name="Product" class="Test.Domain.Product, Test.Domain" column="OwnerID" not-null="true"></many-to-one> 
     </subclass> 
</class> 
</hibernate-mapping> 

回答

2

在你的鑑別映射添加力=真

<discriminator column="OwnerType" force="true" />

這將確保ownertype被添加到查詢

+0

這個工作。謝謝 – kaivalya 2009-11-08 14:28:22

+0

像魅力一樣工作,謝謝! – 2012-08-10 09:01:51