2010-07-07 120 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