浏览 4676 次
锁定老帖子 主题:关于hibernate的延迟加载
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-11-12
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传送到明细页面? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-11-13
一次点击当然是一次请求了。你不想查数据库的话,只能把A或者A.B放在
session里了,不过好像没这么干的。
|
|
返回顶楼 | |
发表时间:2007-11-13
难道延迟加载只能在同一个页面做A.getXXX(),和A.B.getXXX()?
那ROBBIN说的: 当进入某个明细页面,需要显示某个复合对象的集合属性的时候,才会从数据库中真正执行1次SQL,把该复合对象对应的关联表记录取出来,这样有1次SQL,取出m个对象 这是怎么实现的? |
|
返回顶楼 | |
发表时间:2007-11-13
把 a的id传过去,然后在 明细页中load a 然后 a.getB?
|
|
返回顶楼 | |
发表时间:2007-11-13
还有个方法,不知道是不是和hibernate的版本有关
a的id传过去,然后在明细页中 A a = new A(); a.setId("传过来的Id"); a.getB(); 按道理这样不行的,但是好像我有一次在spring里面配置了hibernate 然后这么试了下 好像没问题,但是记得以前单独使用hibernate的时候会异常。。。。。。大家说说是怎么回事? |
|
返回顶楼 | |
发表时间:2007-11-29
laiseeme 写道 还有个方法,不知道是不是和hibernate的版本有关
A a = new A();
a的id传过去,然后在明细页中 A a = new A(); a.setId("传过来的Id"); a.getB(); 按道理这样不行的,但是好像我有一次在spring里面配置了hibernate 然后这么试了下 好像没问题,但是记得以前单独使用hibernate的时候会异常。。。。。。大家说说是怎么回事? a.setId("传过来的Id"); a.getB(); 这个a是一个未被持久化的临时对像,所以这引对像里不存在getB()方法,当然会出异常了。。 |
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间:2007-12-08
session是不是不关闭也可以呢?
session是个轻量级对象,让容器自动去清理行不行? |
|
返回顶楼 | |
发表时间:2007-12-11
OPENSESSIONINVIEW一定要慎用...滥用会出现性能问题...
|
|
返回顶楼 | |