Hibernate进行时

有关Hibenrate及其相关工具的主页
随笔 - 0, 文章 - 16, 评论 - 29, 引用 - 0
数据加载中……

多对一关系中的代理

假设Student对Team是多对一的关系,并且<many-to-one>采取的是默认的加载策略(也即proxy)。那么,在session中取得Student后,在session外通过Student取出Team会发生什么情况呢?分三种情况讨论:
1.student记录对应的team_id为null。注意:是为null,而不是为""。下面为student表情况:
id                    stuName              age                 team_id
123abc            tom                     24                   null
这个时候调用:
log.info(stu.getTeam())打印的是“null”。

2. student记录对应的team_id有值,但这个值并没有对应到任何的实体team,比如随便给team_id设一个值“abcd123adfsdaf”。
id                    stuName              age                 team_id
123abc            tom                     24                   abcd123adfsdaf
这个时候调用:
log.info(stu.getTeam())
弹出异常:“could not initialize proxy - the owning Session was closed”

log.info(stu.getTeam().getClass())
打印的是“class com.model.Team$$EnhancerByCGLIB$$ee64f4f1”。

log.info(stu.getTeam().getId())
打印的是“abcd123adfsdaf”

log.info(stu.getTeam().getTeamName())
弹出异常:“could not initialize proxy - the owning Session was closed”

3. student记录对应的team_id有值,而且这个值对应到了一个实体team。
id                    stuName              age                 team_id
123abc            tom                     24                   402821f90cae6c2b010cae6c31f90001
这个时候调用:
log.info(stu.getTeam())
弹出异常:“could not initialize proxy - the owning Session was closed”

log.info(stu.getTeam().getClass())
打印的是“class com.model.Team$$EnhancerByCGLIB$$ee64f4f1”。

log.info(stu.getTeam().getId())
打印的是“402821f90cae6581010cae6588880001”

log.info(stu.getTeam().getTeamName())
弹出异常:“could not initialize proxy - the owning Session was closed”


从上可以看到第2和第三种情况的测试结果是完全一样的,具体的原因比较简单,在此就不再多说。
不过有的时候“多对一”的“一”这端可以为null,因此就可以用以下的语句判断:
if(student.getTeam()==null)
   log.info(“team为null”);
else{
   Hibernate.initialize(student.getTeam());//这段代码是伪码,我只是想表达这个意思。
   log.info(student.getTeam().getTeamName());
}
 


posted on 2006-07-27 13:49 caixuetao 阅读(414) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: