0

これが状況です。Order、OrderItem、Product、Cristalの4つのテーブルとクラスがあります。

Productは、Cristalの具象クラスおよび基本クラスです。私は、クリスタルを挿入し、それを製品として取得して、クリスタルのインスタンスを生成することをテストしていました。ここまでは順調ですね。

今問題。'Product'プロパティにProductsとCristalsのインスタンスを含むItemsを使用してOrderを永続化します。データベースからOrderオブジェクトを取得すると、OrderItemインスタンスのProductプロパティは常にProductインスタンスになります。クリスタルでなければならないところに、共通フィールドが正しくロードされた製品がありますが、明らかに、特定のクリスタルフィールドにアクセスすることはできません。

どうすればこれを修正できますか?前もって感謝します!

製品とそのサブクラス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はCristalを検索しません。つまり、NHibernateはCristalを参加に含めません。抽象基本クラス(ProductBase)と2つの具象実装を作成します。1つはProduct用、もう1つはCristal用です。

于 2012-04-18T15:20:06.263 に答える