首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Hibernate 繼承映射 discriminator 型別不匹配錯誤解決:指定 discriminator-value

     編輯:Java 相關知識

使用單表繼承策略時,設定 @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 { ... }

產生的 hbm.xml

<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 對應子類別。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved