Hibernate 主子表关联查询问题

wym93519924 2009-06-09 03:44:05
主表(部门表):Tdept(deptid, deptname)
子表(员工表): Temployee (empid, deptid,empname)

员工类 (VO):
class Temployee
private String empid;
private Tdept Tdept;
private String empname;

public String getEmpid() {
return this.empid;
}

public void setEmpid(String empid) {
this.empid = empid;
}

public Tdept getTdept() {
return this.Tdept;
}

public void setTdept(Tdept Tdept) {
this.Tdept = Tdept;
}

public String getEmpname() {
return this.empname;
}

public void setEmpname(String empname) {
this.empname = empname;
}

Temployee temp = TemployeeDao.findById("100");
Tdept tdept = temp.getTdept();
tdept.getDeptname(); //执行到这一句出现错误

错误信息如下:
org.hibernate.LazyInitializationException: could not initialize proxy - no Session 。。。。。。。

不知道是什么原因,难道
Tdept tdept = temp.getTdept();
一句没有获取到Tdept对象实例吗,我其实就是想通过子表去获取主表对象(Tdept), (Tdept的VO和DAO都已经定义好).
不知道通过Temployee员工对象怎么得到它的主表对象其主表中的属性值?

...全文
178 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
smilewmr 2009-06-10
  • 打赏
  • 举报
回复
问题解决了就好!不客气哦!以后多交流交流!
wym93519924 2009-06-09
  • 打赏
  • 举报
回复
谢谢以上两位, 我用

String deptid = temp.getTdept().getDeptid();
Tdept tdept=DeptDao.findById(deptid);
tdept.getDeptname();
倒是可以取到,好象默认情况下,子对象只取到主表外键值,其它属性值就取不到了.

另外试了下smilewmr 同学的方法,非常好用,不用象上面这么麻烦了,在此十分地感谢smilewmr同学帮助.
  • 打赏
  • 举报
回复
找个完整源程序吧


祝福
smilewmr 2009-06-09
  • 打赏
  • 举报
回复
你在hibernate映射文件中有没有写lazy="false"?
在这里,你查询Temployee 对象时将Tdept的主键放在了缓存当中,你如果设置了lazy="false",
当你用到得时候它就会在去查数据库,从而拿到你需要的值!
检查一下你的映射文件,
在Tdept的java类中,应该有个set容器,存放的是Temployee 对象
wym93519924 2009-06-09
  • 打赏
  • 举报
回复
没有用查询语句,都是配置出来的,Temployee temp = TemployeeDao.findById("100");这一句没有错,且Temployee 对象中的所有属性值都可以获取,但取它的主表Tdept对象中的属性时报错,打印显示 tdept 对象非空,但一用tdept.getDeptname();取属性时就报错!
smilewmr 2009-06-09
  • 打赏
  • 举报
回复
能不能把你的查询语句贴出来看看啊???

67,513

社区成员

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

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