有关Hibernate的Lazy加载问题,请求支援!

keel47 2007-05-19 10:51:03
大家好,在开发一个Hibernate项目时遇到了这种需求:
1.某业务实体设为Lazy加载.
2.在特殊场合,比如显示该业务实体的详细页面时,几乎访问到了该业务实体的所有关联数据.(业务实体.关联实体.关联实体2.xx.x.name,这个样子).
在这种情况下编程序稍有不慎就会抛出"session is close"异常.
不得已的情况下,采用查出实体后立刻调用所有相关get的方法,不过这样作代码太乱了(关联业务属性过多).

问题:
业务实体必须配置为Lazy(项目需求),在不改变配置的情况下,能否实现某段检索代码中,临时将这个业务实体的Lazy属性设为false?应该怎么写这样的代码呢?
拜托高手指教!谢谢了!
...全文
450 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dreamover 2007-06-14
  • 打赏
  • 举报
回复
OpenSessionInView
Ice39281624 2007-06-14
  • 打赏
  • 举报
回复
关注``我也遇到这问题```

hbm.xml里设置是true, 后面调用关联表的时候 就报错 session close

又要手动去设置false...这样弄 太痛苦了....
Sherlock_Holmes 2007-06-14
  • 打赏
  • 举报
回复
OpenSessionInView
zww80216 2007-06-13
  • 打赏
  • 举报
回复
OpenSessionInView,根本解决之道,否则我劝您还是放弃hibernate,对己对人对公司都好。
likgui 2007-06-13
  • 打赏
  • 举报
回复
关注
cao_david 2007-06-12
  • 打赏
  • 举报
回复
把某业务实体设为Lazy加载;也就是说;在你没有去操作这个“业务实体”之前;这个“业务实体”是null;如果你在操作这个“业务实体”时之前关闭Session;就会抛出"session is close"异常.因为你在操作这个“业务实体”的时侯;Hibernate才使用session对象去访问数据库加载“业务实体”数据;你已经关闭Session了,所有就无法从数据库中加载数据了;自然就抛出"session is close"异常。

关于Lazy的属性详细说明,你可以到hibernate v3.04中文参考手册查找。
haitingr 2007-06-08
  • 打赏
  • 举报
回复
不明白你采用得什么系统架构

如果你不方便在客户端显示敏感信息,可以在服务器端做一个sessionid得池来保存这些变量,这样可以解决所有得问题
ananroad 2007-06-08
  • 打赏
  • 举报
回复
在取出来之后
if(!Hibernate.isInitialized(object)){
Hibernate.initialize(object);
}
killme2008 2007-06-08
  • 打赏
  • 举报
回复
OpenSessionInView
keel47 2007-05-21
  • 打赏
  • 举报
回复
自己支持一下
keel47 2007-05-19
  • 打赏
  • 举报
回复
遗憾的是,这个无法保证这个业务实体的取得和使用在同一个线程内啊.
简单举例:变更页面的进入->显示->用户修改内容并submit的这个过程,已经执行过两次Servlet了.
依照书里说的话,可以在"修改并提交"这个过程里,重新load一下这个已经游离的业务实体,但是由于这个项目的种种原因,方案不可行...呵呵,其他的想法呢?
haitingr 2007-05-19
  • 打赏
  • 举报
回复
保证级联取和取对象在一个线程内,这是hibernate的线程本地变量对session的持有造成
keel47 2007-05-19
  • 打赏
  • 举报
回复
加分了,高手们拜托了!

67,514

社区成员

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

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