我正在将NHibernate用于电子商务网站,并且很难获得应该是一个简单的映射工作。基本上我有一个ContactDetails实体,用于保存任何类型用户的联系方式 - 买方/卖方/广告商/等。我使用“any”映射来允许单个表保存每种类型的contact_details。该ID将写入contact_details_id,并将类型(买方/卖方/广告商)写入contact_details_type字段,如下所示。
<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
答案 0 :(得分:2)
one-to-one
。
备选方案:
Buyer
和Seller
,可以创建一个超类(您可以将其称为Party
),使用隐式以外的任何策略映射层次结构,并使用常规one-to-one
或many-to-one
关系,而不是any
(首选)(隐式多态方法的局限性在此强调:http://nhibernate.info/doc/nh/en/index.html#inheritance-limitations)