请教高手hibernate POJO的继承问题?

GUN_JACK 2005-12-16 09:11:55
映射文件:
<hibernate-mapping package="test2.bo">

<class name="Party" table="[PARTY]">
<id name="partyId" column="PARTY_ID" type="java.lang.Integer">
<generator class="increment"/>
</id>
<property name="partyName" column="PARTY_NAME" type="java.lang.String" not-null="true" />
<set name="userSet" inverse="true">
<key column="PARTY_ID"/>
<one-to-many class="User"/>
</set>
<joined-subclass name="SubParty2" table="[SUB_PARTY2]">
<key column="PARTY_ID"/>
<property name="subParty2Name" column="SUB_PARTY2_NAME" type="java.lang.String" not-null="true" />
</joined-subclass>
<joined-subclass name="SubParty1" table="[SUB_PARTY1]">
<key column="PARTY_ID"/>
<property name="subPartyName" column="SUB_PARTY_NAME" type="java.lang.String" not-null="true" />
</joined-subclass>

</class>

</hibernate-mapping>
配置文件中我只加入了<mapping resource="test2/bo/Party.hbm.xml" />
SubParty1的定义为:
public class SubParty1 extends Party
implements Serializable
SubParty2的定义为:
public class SubParty2 extends Party
implements Serializable
测试的时候,我发现,如果按照如下代码的话,基本上哪一个<joined-subclass>配在前面,哪个就能进行类型转换,后一个就不行,报类型转换错误。。。。。。。。。。。。。
/*Party party=(Party)session.get(Party.class,new Integer(1));
System.out.println(((SubParty1)party).getSubPartyName());
System.out.println(((SubParty2)party).getSubParty2Name());
System.out.println(party.getPartyName());*/


请问为什么会发生这样的问题,我应该如何解决?
...全文
220 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
arrowkylin 2005-12-22
  • 打赏
  • 举报
回复
配置文件没有问题,是你在类型转换时发生了错误,可能你存储时的类型为SubParty1而你用SubParty2类型来转换,就导致出错,把你的存储和访问的代码贴上来看看
arrowkylin 2005-12-21
  • 打赏
  • 举报
回复
上面第四行代码应该为:
System.out.println(((SubParty2)party).getSubParty2Name());
不好意思
arrowkylin 2005-12-21
  • 打赏
  • 举报
回复
/*Party party=(Party)session.get(Party.class,new Integer(1));
System.out.println(((SubParty1)party).getSubPartyName());
System.out.println(((SubParty2)party).getSubParty2Name());
System.out.println(party.getPartyName());*/

一段代码犯了好几个错误,你可以这样操作:
Party party=(Party)session.get(SubParty1.class,new Integer(1));
System.out.println(((SubParty1)party).getSubPartyName());
或者
Party party=(Party)session.get(SubParty2.class,new Integer(1));
System.out.println(((SubParty2)party).getSubPartyName());
具体怎么操作,要看你在save的时候用什么类来存储,及非公共数据数据到底是存储到哪个子表内
GUN_JACK 2005-12-21
  • 打赏
  • 举报
回复
求助阿
GUN_JACK 2005-12-21
  • 打赏
  • 举报
回复
to arrowkylin(老杨)

运行到 System.out.println(((SubParty2)party2).getSubParty2Name());
java.lang.ClassCastException
错误依旧,是不是我上面的配置文件有问题??
frankh2002 2005-12-21
  • 打赏
  • 举报
回复
晕 弄得这么麻烦的?你还不如使用one-to-one关联解决这个问题。
GUN_JACK 2005-12-18
  • 打赏
  • 举报
回复
GUN_JACK 2005-12-17
  • 打赏
  • 举报
回复
等待~~~
Bluce 2005-12-16
  • 打赏
  • 举报
回复
关注!!

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧