就是这种情况。我有4个表和类,Order,OrderItem,Product和Cristal。
Product是Cristal的具体类和基类。我正在测试插入一个Cristal,然后将其作为产品检索,产生一个Cristal istance。到现在为止还挺好。
现在问题。我在“产品”属性中保留包含产品和Cristals实例的订单的订单。当我从数据库中检索Order对象时,OrderItem实例中的Product属性始终是Product实例。哪里必须是Cristal,有一个产品的公共字段加载正确,但很明显,我无法访问特定的Cristal字段。
我该如何解决这个问题?提前谢谢!
产品及其子类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>
答案 0 :(得分:1)
自从我使用NHibernate以来已经有一段时间了,但我想我知道问题可能是什么。
由于Product是一个具体的类,NHibernate不会寻找任何Cristals。也就是说,NHibernate不会在连接中包含Cristal。创建一个抽象基类(ProductBase)和两个具体实现,一个用于Product,另一个用于Cristal。