Hibernate继承映射的“Could not format discriminator value to SQL string”错误解决方法
2016-01-07 10:27
579 查看
借助于Hibernate强大的O/R Mapping能力,我们能够通过discriminator轻易地将一颗继承树映射到一个表中,通过discriminator确定具体映射的子类。
在设置@hibernate.discriminator column="type" type="integer"后,启动Hibernate报错:
Could not format discriminator value to SQL string
搜索Hibernate官方文档后发现问题,原来Hibernate默认的discriminator的type是String,当设置discriminator的type为integer后,需要为父类也设置 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>
在设置@hibernate.discriminator column="type" type="integer"后,启动Hibernate报错:
Could not format discriminator value to SQL string
搜索Hibernate官方文档后发现问题,原来Hibernate默认的discriminator的type是String,当设置discriminator的type为integer后,需要为父类也设置 class
table="TABLE_NAME" discriminator-value="not null",否则,Hibernate默认的discriminator-value是完整的类名,在转换String到int时造成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>
相关文章推荐
- 1.UIButton的基本使用
- EasyUi心得
- Understanding Steering Behaviors: Queue
- 构建一个倒排索引 A first take at building an inverted index
- UITableView中刷新单行cell与单个section段的方法
- UIAlertView、 UIActionSheet
- 拖动条控件 (UISlider)
- 进度环控件 (UIActivityIndicatorView)
- 进度条控件 (UIProgressView)
- 图像控件 (UIImageView)
- UE4 Socket多线程非阻塞通信【2】
- 分段控件 (UISegmentedControl)
- diskimage-builder的容器镜像
- WeChat demo 麦子学院课程笔记 UI部分
- 初学UEditor
- 事件处理, UIControl的子类
- UIScrollView不能响应touch事件的解决办法
- 详解iOS应用UI开发中的九宫格坐标计算与字典转换模型
- querySelector/querySelectorAll选择器两个容易忽略的点
- Arduino 串口的一些高级用法