分享
 
 
 

怪异的hibernate WrongClassException异常

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

共有四个类A,B,B1,B2,B1,B2继承B,A和B1,B2是<one-to-one>关系:代码如下(省略getter/setter):

//A.java

public class A{

private Integer id;

private B1 b1;

private B2 b2;

}

//B.java

public abstract class B{

private Integer id;

private A a;

}

//B1.java

public class B1 extends B{

}

//B2.java

public class B2 extends B{

}

hibernate映射文件为:

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >

<hibernate-mapping package="test">

<class name="A">

<id name="id">

<generator class="native"/>

</id>

<one-to-one name="b1" property-ref="a" cascade="all"/>

<one-to-one name="b2" property-ref="a" cascade="all"/>

</class>

<class name="B" discriminator-value="0">

<id name="id">

<generator class="native"></generator>

</id>

<discriminator type="integer" column="B_TYPE"/>

<!-- 以下的两个many-to-one居然不能在超类中声明 -->

<!-- hibernate会抛出net.sf.hibernate.MappingException: -->

<!-- property-ref not found: a in class: test.B1 -->

<!-- 不知道算不算hibernate的一个不尽如人意的地方 -->

<!-- 注意:many-to-one中并没有定义unique='true',否则insert 数据会失败,因为违反唯一索引 -->

<subclass name="B1" discriminator-value="1">

<many-to-one name="a" column="a_id"/>

</subclass>

<subclass name="B2" discriminator-value="2">

<many-to-one name="a" column="a_id"/>

</subclass>

</class>

</hibernate-mapping>

使用hibernate schemaupdate生成表,并插入以下结构的数据:

表:a

id

1

表:b

id B_TYPE a_id

1 1 1

2 2 1

然后select id=1的A对象,hibernate抛出一下异常:

net.sf.hibernate.WrongClassException: Object with id: 1 was not of the specified subclass: test.B2 (loaded object was of wrong class)

似乎是hiberate把b表中id=1和id=2的两条记录当成一种对象(要么B1,要么B2)看待了,其实我觉得在这种情况下,hibernate完全

有能力(只需要在where语句中限制类型)区分我们的对象究竟是B1还是B2,不知道这算不算hibernate的一个bug?

解决方法:

方法1:把A对B1,B2的<one-to-one>关系拆分成对B的集合关系。

方法2:使用joined-subclass定义B1和B2,避免两种类型出现在同一表中

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有