使用單表繼承策略時,設定 @hibernate.discriminator column="type" type="integer" 啟動報錯:Could not format discriminator value to SQL string。
Hibernate 預設 discriminator-type 為 string,父類別預設 discriminator-value 為完整類別名稱(字串)。當將 discriminator 型別改為 integer 卻未指定數值型別的 discriminator-value,Hibernate 嘗試將類別名稱轉換為整數導致 NumberFormatException。
在父類別標籤額外指定 discriminator-value="not null"(或任意有效整數字串):
/** @hibernate.class table="TABLE_NAME" discriminator-value="not null" */
public abstract class AbstractClass { ... }
子類別各自指定整數值:
/** @hibernate.subclass discriminator-value="1" */
public class SubClass1 extends AbstractClass { ... }
/** @hibernate.subclass discriminator-value="2" */
public class SubClass2 extends AbstractClass { ... }
<class name="com.crackJ2EE.example.AbstractClass" table="TABLE_NAME" discriminator-value="not null">
<id name="id" column="id" type="java.lang.Long"><generator class="increment"/></id>
<discriminator column="type" not-null="true" type="integer"/>
<subclass name="com.crackj2ee.example.SubClass1" discriminator-value="1"/>
<subclass name="com.crackj2ee.example.SubClass2" discriminator-value="2"/>
</class>
啟動即正常,資庫 type 欄位將儲存 1/2 對應子類別。