代码之家  ›  专栏  ›  技术社区  ›  JP.

NHIbernate<any>映射问题

  •  3
  • JP.  · 技术社区  · 14 年前

    我使用NHibernate的电子商务网站,并有困难得到什么应该是一个简单的映射工作。本质上,我有一个ContactDetails实体,用于保存任何类型的用户(买家/卖家/广告客户等)的联系信息。我使用“any”映射允许单个表保存每种类型的联系信息。ID写入contact\u details\u ID,type(买方/卖方/广告客户)写入contact\u details\u 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\u details\u id字段,而是连接contact\u details表的id字段。我已经尝试了所有可能的方法,但是无论发生什么,我都无法将代码加入到正确的字段(contact\u details\u id)。有没有人尝试过这个,如果有,它是如何工作的?如果需要更多的细节,请告诉我。

    提前谢谢,

    日本

    1 回复  |  直到 14 年前
        1
  •  2
  •   Owen Pauling tmatuschek    9 年前

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

    • 创建的超类 Buyer Seller 如果你没有(你可以称之为 Party ),使用隐式以外的任何策略映射层次结构,并使用正则表达式 一对一 many-to-one 关系而不是 any (首选)
    • 不要将关系映射到 买方 而是使用查询

    (这里强调了隐式多态性方法的局限性: http://nhibernate.info/doc/nh/en/index.html#inheritance-limitations )