我正在使用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。生成的查询不是连接到contact_details_id字段,而是连接到contact_details表的ID字段。我已经尝试了所有可能的方法,但无论发生什么,我都不能让代码在正确的字段(contact_details_id)上连接。有没有人尝试过这样做,如果有,它是如何工作的?如果需要更多的细节,请告诉我。
提前谢谢你,
JP
发布于 2010-07-09 22:36:22
隐式多态性不支持one-to-one。
替代方案:
Buyer和Seller的超类(如果没有)(您可以将其称为Party),使用除隐式之外的任何策略映射层次结构,并使用常规one-to-one或many-to-one关系而不是any来映射Buyer中的关系,并使用查询来代替<代码>H212<代码>F213(这里强调了隐式多态性方法的局限性:http://nhibernate.info/doc/nh/en/index.html#inheritance-limitations)
https://stackoverflow.com/questions/3191466
复制相似问题