hibernate问题:关于lazy加载对于many-to-one对象的load问题。储存的时候是子类,load出来的是基类的对象。

luoxiang2000 2008-03-20 11:40:50
使用lazy加载,储存的时候是子类,load出来的是基类的对象。
比如:
class person {
Address addr;
}

class Address {
String id;
}

class EmailAddress extends Address {
String name;
}

存储:
person p = new person();
EmailAddress addr = new EmailAddress();
addr.id = "001";
addr.name = "test";
p.addr = addr;
XXX.save(p);

但后来load的时候,如果没有使用lazy,也就是说lazy="false",那么取出来的p.addr是一个EmailAddress对象,可是如果使用lazy,也就是说lazy="true",取出来的p.addr却是一个Address对象。
强制转换都不行。也就是说我还必须去数据库中,根据这个Address的id再去取一下才能得到一个EmailAddress对象。为什么?有没有什么解决办法?谢谢。
...全文
120 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaobaohua 2008-03-25
  • 打赏
  • 举报
回复
看看这个吧!
http://jsp.zgdxsw.com/frame/frame-hibernate/200709/article_6818.shtml
xlongbuilder 2008-03-22
  • 打赏
  • 举报
回复
奇怪
临远 2008-03-22
  • 打赏
  • 举报
回复
hibernate继承的确有这个问题,我们用的继承少,一旦遇到了就要类型转换。
不知道有没有其他好方法。
luoxiang2000 2008-03-20
  • 打赏
  • 举报
回复
很普通的取法:
Query q = session.createQuery("From person where id = '001'");
q.list();

当然我上面的类定义代码省略了id 字段。
miaoliujun 2008-03-20
  • 打赏
  • 举报
回复
你是怎么取的,最好能写出代码
声明的时候可以著名EmailAddress.class

67,512

社区成员

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

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