2010-07-07 180 views
3

我使用NHibernate的電子商務網站時遇到困難得到什麼應該是一個簡單的繪圖工作。實質上,我有一個ContactDetails實體,用於保存任何類型用戶的聯繫人詳細信息 - Buyer/Seller/Advertiser /等。我使用「任何」映射來允許單個表爲每個類型保存contact_details。該ID將寫入contact_details_id,並將類型(buyer/seller/advertiser)寫入contact_details_type字段,如下所示。NHibernate的<any>映射問題

<class name="ContactDetails" table="contact_details"> 

<id name="ID"> 
    <generator class="hilo" /> 
</id> 

<any name="Party" id-type="System.Int32" meta-type="System.String" cascade="all"> 
    <meta-value value="buyer" class="Buyer" /> 
    <meta-value value="seller" class="Seller" /> 
    <column name="contact_details_type" /> 
    <column name="contact_details_id" /> 
</any> 

在我的買家映射我有一個一到一個接觸的細節看起來如下

<one-to-one name="ContactDetails" class="ContactDetails" cascade="all" /> 

這一切看起來很好,我能夠contactdetails保存到數據庫。我的問題是,當我試圖從數據庫加載一個買家ContactDetails不返回。生成的查詢不加入contact_details_id字段,而是加入contact_details表的ID字段。我嘗試了一切可能,但無論發生什麼情況,我都無法讓代碼加入正確的字段(contact_details_id)。有沒有人嘗試過,如果有的話,它是如何工作的?請讓我知道是否需要額外的細節。

由於提前,

JP

回答

2

one-to-one不支持隱式多態。

替代方案:

  • 創建的BuyerSeller一個超類,如果你沒有一個(你可以叫它Party),使用比隱以外的任何戰略地圖的層次結構,並使用常規one-to-onemany-to-one關係代替any(優選的)
  • 不要映射Buyer的關係,並使用查詢代替

(隱式多態方法的侷限性在這裏強調:http://nhibernate.info/doc/nh/en/index.html#inheritance-limitations

+0

優秀的,謝謝! – 2010-07-11 16:17:56