论坛首页 Java企业应用论坛

关于hibernate的延迟加载

浏览 4676 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-11-12  
看过ROBBIN写的一个帖子:
http://www.iteye.com/topic/141
引用

复合持久对象的延迟加载技术(Lazy initialization) :
O/R Mapping一般都支持延迟加载,复合对象的集合属性是不会立刻从数据库中取出来的。这样当在页面分页显示复合对象,而不需要使用其集合属性时候,只有1次SQL,取出n个对象。当进入某个明细页面,需要显示某个复合对象的集合属性的时候,才会从数据库中真正执行1次SQL,把该复合对象对应的关联表记录取出来,这样有1次SQL,取出m个对象




A---B间是一对多的关系

HQL:FROM A.CLASS 查询A表,B表(B表LAZYLOADING)

JSP:页面显示的时候可以使用A.B将关联的SET取得(opensessioninview)

问题:B作为A的明细页面,点击A表的一个链接才显示A.B(一个新页),这个A.B是一个SET如何才能吧这个SET传送到明细页面?
   发表时间:2007-11-13  
一次点击当然是一次请求了。你不想查数据库的话,只能把A或者A.B放在 session里了,不过好像没这么干的。
0 请登录后投票
   发表时间:2007-11-13  
难道延迟加载只能在同一个页面做A.getXXX(),和A.B.getXXX()?

那ROBBIN说的:

当进入某个明细页面,需要显示某个复合对象的集合属性的时候,才会从数据库中真正执行1次SQL,把该复合对象对应的关联表记录取出来,这样有1次SQL,取出m个对象

这是怎么实现的?
0 请登录后投票
   发表时间:2007-11-13  
把 a的id传过去,然后在 明细页中load a 然后 a.getB?
0 请登录后投票
   发表时间:2007-11-13  
还有个方法,不知道是不是和hibernate的版本有关
a的id传过去,然后在明细页中
A a = new A();
a.setId("传过来的Id");
a.getB();
按道理这样不行的,但是好像我有一次在spring里面配置了hibernate
然后这么试了下 好像没问题,但是记得以前单独使用hibernate的时候会异常。。。。。。大家说说是怎么回事?
0 请登录后投票
   发表时间:2007-11-29  
laiseeme 写道
还有个方法,不知道是不是和hibernate的版本有关
a的id传过去,然后在明细页中
A a = new A();
a.setId("传过来的Id");
a.getB();
按道理这样不行的,但是好像我有一次在spring里面配置了hibernate
然后这么试了下 好像没问题,但是记得以前单独使用hibernate的时候会异常。。。。。。大家说说是怎么回事?
A a = new A();
a.setId("传过来的Id");
a.getB();

这个a是一个未被持久化的临时对像,所以这引对像里不存在getB()方法,当然会出异常了。。
0 请登录后投票
   发表时间:2007-12-07  
木剑先生 写道
看过ROBBIN写的一个帖子:
http://www.iteye.com/topic/141
引用

复合持久对象的延迟加载技术(Lazy initialization) :
O/R Mapping一般都支持延迟加载,复合对象的集合属性是不会立刻从数据库中取出来的。这样当在页面分页显示复合对象,而不需要使用其集合属性时候,只有1次SQL,取出n个对象。当进入某个明细页面,需要显示某个复合对象的集合属性的时候,才会从数据库中真正执行1次SQL,把该复合对象对应的关联表记录取出来,这样有1次SQL,取出m个对象




A---B间是一对多的关系

HQL:FROM A.CLASS 查询A表,B表(B表LAZYLOADING)

JSP:页面显示的时候可以使用A.B将关联的SET取得(opensessioninview)

问题:B作为A的明细页面,点击A表的一个链接才显示A.B(一个新页),这个A.B是一个SET如何才能吧这个SET传送到明细页面?


一般情况下 A--B 一对多的关系把A的主键作为一个属性放在B的一个字段里,使用延迟加载,只能取得B对象,不能取的相关连的A对象。解决的办法是
1) 在配置文件里将延迟加载的属性设置为false。
2) 或者延长Session的生命周期,不要在取完B后关闭session
0 请登录后投票
   发表时间:2007-12-08  
session是不是不关闭也可以呢?
session是个轻量级对象,让容器自动去清理行不行?
0 请登录后投票
   发表时间:2007-12-11  
OPENSESSIONINVIEW一定要慎用...滥用会出现性能问题...
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics