nhibernate<;子类>&书信电报;加入>;嵌套另一个子类映射(导致重复插入叶类)

nhibernate<;子类>&书信电报;加入>;嵌套另一个子类映射(导致重复插入叶类),nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,这个映射有什么问题? 保存Class3实例时,将插入表2中的两行 第一行的Column4设置为null,Column3的值正确, 第二行的Column3设置为null,Column4的值正确 <class name="Class1" table="Table_1"> <id name="Column1"> <generator class="native" /> </id> <discriminator

这个映射有什么问题? 保存Class3实例时,将插入表2中的两行

第一行的Column4设置为null,Column3的值正确, 第二行的Column3设置为null,Column4的值正确

  <class name="Class1" table="Table_1">
    <id name="Column1">
      <generator class="native" />
    </id>
    <discriminator column="ColumnDisc" />
    <property name="Column2" type="int" />
    <subclass name="Class2">
       <join table="Table_2">
         <key column="Column1" />
         <property name="Column3" type="int" />
       </join>
       <subclass name="Class3" >
          <join table="Table_2">
            <key column="Column1" />
            <property name="Column4" type="int" />
          </join>
       </subclass>
    </subclass>
  </class>

在哪里设置每个派生类型的鉴别器值

如果我相信您在评论中指出的链接,则类映射如下所示:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class name="com.javalobby.tnt.hib.User" table="USER" lazy="false">
        <id name="id" type="long" column="ID">
        <generator class="identity" />
    </id>

    <discriminator column="type" type="string"/>

    <property name="firstName" column="first_name"/>
    <property name="lastName" column="last_name"/>

    <subclass name="com.javalobby.tnt.hib.Employee" discriminator-value="employee">
        <join table="employee">
            <key column="id"/>
            <property name="jobTitle" column="job_title"/>
            <many-to-one name="supervisor" column="supervisor_id" not-null="true" />
        </join>
        <subclass name="com.javalobby.tnt.hib.Employer" discriminator-value="employer">
            <set name="subordinates">
                <key column="supervisor_id" not-null="true"/>
                <one-to-many class="com.javalobby.tnt.hib.Employee"/>
            </set>
            <join table="employer">
                <key column="id"/>
                <property name="companyCarBrand" column="company_car_brand"/>
            </join>
        </subclass>
    </subclass>
</class>
确保为要映射的每个子类设置了正确的鉴别器值。我建议尝试一下,看看是否效果更好,或者这是否引发了另一个问题。=)


希望这有帮助!=)

这看起来不是一个有效的映射。是的。我已经测试了我所说的。Hibernate确实实现了本文最后一节中所述的场景:谢谢,朋友,也许它会解决问题,我必须测试它:-)我很高兴我能帮上忙!这就是为什么
<class name="Class1" table="Table_1">
    <id name="Column1">
        <generator class="native" />
    </id>
    <discriminator column="ColumnDisc" />

    <property name="Column2" type="int" />

    <subclass name="Class2"> <!-- The discriminator-value="" is missing here... -->
      <join table="Table_2">
        <key column="Column1" />
        <property name="Column3" type="int" />
      </join>
      <subclass name="Class3" > <!-- The discriminator-value="" is missing here... -->
        <join table="Table_2">
          <key column="Column1" />
          <property name="Column4" type="int" />
        </join>
      </subclass>
    </subclass>
  </class>