2013-04-03 97 views
0

我有以下映射文件。例外字段'DISCRIMINATOR'没有默认值

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

上述映射有什么问题?

+0

您是否尝试过? –

回答

0

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

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

相关问题