在設置@hibernate.discriminator column="type" type="integer"后,啟動Hibernate報錯:
Could not format discriminator value to SQL string
搜索Hibernate官方文檔后發現問題,原來Hibernate默認的discriminator的type是String,當設置discriminator的type為integer后,需要為父類也設置@hibernate.class table="TABLE_NAME" discriminator-value="not null",否則,Hibernate默認的discriminator-value是完整的類名,在轉換String到int時造成NumberFormatException。
最后運行XDoclet,生成hbm文件:
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.crackj2ee.example.AbstractClass" table="TABLE_NAME" discriminator-value="not null"> <id name="id" column="id" type="java.lang.Long" unsaved-value="null"> <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> </hibernate-mapping> |