【问题标题】:NHIbernate <any> mapping issueNHIbernate <any> 映射问题
【发布时间】:2016-01-11 00:54:12
【问题描述】:

我正在将 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)。有没有人尝试过,如果有,它是如何工作的?如果需要更多详细信息,请告诉我。

提前致谢,

日本

【问题讨论】:

    标签: c# nhibernate nhibernate-mapping


    【解决方案1】:

    one-to-one 不支持隐式多态性。

    替代方案:

    • 如果没有超类,请创建BuyerSeller(可以称之为Party),使用除隐式以外的任何策略映射层次结构,并使用常规one-to-one 或@ 987654327@ 关系而不是 any(首选)
    • 不要映射Buyer 中的关系,而是使用查询

    (隐式多态方法的局限性在这里突出显示:http://nhibernate.info/doc/nh/en/index.html#inheritance-limitations

    【讨论】:

      猜你喜欢
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 2010-10-11
      • 1970-01-01
      相关资源
      最近更新 更多