异常字段'DISCRIMINATOR'没有默认值

时间:2013-04-03 12:24:59

标签: hibernate

我有以下映射文件。

<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'没有默认值。

上述映射有什么问题?

1 个答案:

答案 0 :(得分:0)

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

但是,我不认为可以使用使用鉴别器的子类扩展union-subclass - 你必须为你的TWOSUB类使用另一个union-subclass,或者你不使用union-完全从子类继承TWO的子类。至少union-subclass标签没有discriminator-value属性,因此无法区分TWO和TWOSUB。