服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

hibernate继承映射时错误的解决方法


  借助于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后,需要为父类也设置@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>

扫描关注微信公众号