0

我有以下映射文件。

<hibernate-mapping>
<class name="One" abstract="true">
       <id name="id" type="long" column="ID">
            <generator class="assigned"/>
        </id>
         <discriminator column="DISCRIMINATOR" type="string" />

        <union-subclass name="Two" table="TWO">
        .
        .
        </union-subclass>
        <union-subclass name="Three" table="THREE">
        .
        .
        </union-subclass>
</class>
</hibernate-mapping>

<hibernate-mapping>
    <subclass name="TWOSUB" extends="TWO">
        .
        .
    </subclass>
</hibernate-mapping>

当我尝试添加 TWOSUB 的对象时,它会引发以下异常字段 'DISCRIMINATOR' 没有默认值。

上面的映射有什么问题?

4

1 回答 1

0

您需要将 discriminator-value="YOUR_CUSTOM_SUBCLASS_DISCRIMINATOR_VALUE" 添加到使用鉴别器相互区分的所有类标签(因此映射到同一个表中)。否则 hibernate 不知道使用哪个鉴别器值来区分它们。

但是,我认为不可能用使用鉴别器的子类来扩展联合子类——你要么必须为你的类 TWOSUB 使用另一个联合子类,要么根本不使用联合子类从一个继承两个。至少 union-subclass 标签没有 discriminator-value 属性,因此无法区分 TWO 和 TWOSUB。

于 2013-05-22T13:00:00.927 回答