0

这是这种情况。我有 4 个表和类,Order、OrderItem、Product 和 Cristal。

Product 是 Cristal 的具体类和基类。我正在测试插入一个 Cristal,然后将其作为产品检索,产生一个 Cristal istance。到目前为止,一切都很好。

现在的问题。我在“产品”属性中保留包含产品和水晶实例的项目的订单。当我从数据库中检索 Order 对象时,OrderItem 实例中的 Product 属性始终是 Product 实例。哪里必须是 Cristal,有一个 Product 正确加载了公共字段,但显然,我无法访问特定的 Cristal 字段。

我怎样才能解决这个问题?提前致谢!

Products 及其子类 Cristal 的映射

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
       assembly="MyNamespace"
       namespace="MyNamespace">
  <class name="Product" table="Products">
    <id name="Id" column="id">
      <generator class="guid.comb" />
    </id>
    <property name="Name" column="name" type="string" not-null="true" />
    <property name="Code" column="code" type="string" not-null="true" />

    <union-subclass name="Cristal" table="Cristals">
      <property name="Esf" column="esf" precision="5" scale="3" not-null="true" />
      <property name="Cil" column="cil" precision="5" scale="3" not-null="true" />
      <property name="Diameter" column="diameter" type="int" not-null="true" />
    </union-subclass>
  </class>
</hibernate-mapping>

订单映射

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
               assembly="MyNamespace"
               namespace="MyNamespace">
  <class name="Order" table="Orders">
    <id name="Id" column="id">
      <generator class="guid.comb" />
    </id>
    <property name="Number" column="number" type="int" not-null="true" />
    <set name="Items" cascade="all-delete-orphan" inverse="true">
      <key column="idOrder" not-null="true" />
      <one-to-many class="OrderItem"/>
    </set>
  </class>
</hibernate-mapping>

OrderItem 的映射

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
               assembly="MyNamespace"
               namespace="MyNamespace">
  <class name="OrderItem" table="OrderItems">
    <id name="Id" column="id">
      <generator class="guid.comb" />
    </id>

    <property name="Price" column="price" precision="15" scale="3" not-null="true" />
    <many-to-one name="Order" column="idOrder" foreign-key="FK_OrderItems" not-null="true"  />
    <many-to-one name="Product" column="idProduct" foreign-key="FK_ProductOrderItems"  />

   </class>
</hibernate-mapping>
4

1 回答 1

1

自从我使用 NHibernate 以来已经有一段时间了,但我想我知道问题可能出在哪里。

由于 Product 是一个具体的类,NHibernate 不会寻找任何 Cristals。也就是说,NHibernate 不会在连接中包含 Cristal。创建一个抽象基类 (ProductBase) 和两个具体实现,一个用于 Product,另一个用于 Cristal。

于 2012-04-18T15:20:06.263 回答