Hibernate继承映射的“Could not format discriminator value to SQL string”错误解决方法

借助于Hibernate强大的O/R Mapping能力,我们能够通过discriminator轻易地将一颗继承树映射到一个表中,通过discriminator确定具体映射的子类。

 

在设置@hibernate.discriminator column="type" type="integer"后,启动Hibernate报错:

Could not format discriminator value to SQL string

 

搜索Hibernate官方文档后发现问题,原来Hibernate默认的discriminatortypeString,当设置discriminatortypeinteger后,需要为父类也设置 class table="TABLE_NAME" discriminator-value="not null",否则,Hibernate默认的discriminator-value是完整的类名,在转换Stringint时造成NumberFormatException


即:

 <class name="com.sjr.bean.PeopleT" table="J_PEOPLE2" schema="SXBBKF" discriminator-value="not null">  --这里加上
        <id name="id" type="long">
            <column name="ID" precision="22" scale="0" />
            <generator class="native"></generator>
        </id>
        
         <discriminator column="type" type="int"/>   --必须直接跟在id后面
         
        <property name="name" type="string">
            <column name="NAME" length="20" />
        </property>
        <property name="age" type="int">
            <column name="AGE" precision="22" scale="0" />
        </property>
        
        <subclass name="com.sjr.bean.Student" discriminator-value='1'>   --实际是从字符串转化为整型的
        <property name="school"></property>
        </subclass>
        
        <subclass name="com.sjr.bean.Staff" discriminator-value='2'>
        <property name="company"></property>
        </subclass>


 

最后运行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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值