これが状況です。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>