Hibernate 创建一个涉及两个表的对象的问题

无欲则钢 2005-11-18 09:49:01
我有一个类,他除了自身对应一个表外,他的一个类集属性还对应另一个表,在初始化该类时Hibernate 只创建了本身的表的数据。当使用对象的类集属性时 初始化报错
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: *****.*****, no session or session was closed
请问Session在这个过程中的开闭有什么特殊的要求??
...全文
246 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengcg 2005-11-22
  • 打赏
  • 举报
回复
实际上Hibernate提供几种选择的:
1、自己在映射文件里改“lazy”参数,但是有时这个效率太低;
2、根据需要在session仍然打开是调用 setName.size(),(setName你的集合名称),但是这个有点可能有点令人费解,也不符合通常的代码规范;
3、根据需要在session仍然打开是使用Hibernate.initialize(parent.getSetName())来转载数据;
4、采用 fetch all properties 查询选项来进行强制装载,如 "From Parent fetch all properties",这就可以只对这个查询的结果集生效。
我知道的就这么多,看看谁还有补充哦。
down0011 2005-11-22
  • 打赏
  • 举报
回复
用open session in view应该就可以,你是在测试或者action里报错吗
左大神在这 2005-11-19
  • 打赏
  • 举报
回复
学到很多,顶
无欲则钢 2005-11-18
  • 打赏
  • 举报
回复
我知道,有没有让他用的事候再初始化数据
“请问Session在这个过程中的开闭有什么特殊的要求??”
我要用懒汉式,Session要怎么控制??
skycncomp 2005-11-18
  • 打赏
  • 举报
回复
我晕,楼上的,就是设置lazy啊
无欲则钢 2005-11-18
  • 打赏
  • 举报
回复
chatboycsdn(江湖小虾米)你说的我也知道,但是怎么做你怎么不说。
skycncomp 2005-11-18
  • 打赏
  • 举报
回复
把lazy设置成false看看
chatboycsdn 2005-11-18
  • 打赏
  • 举报
回复
hibernate默认是使用惰性载入的,即在读入主表的数据时不会自动装载子表的数据,如果你通过调用Pojo中的getXXX()方法来读入子表数据的时候已经使用HibernateUtil.closeSession()方法关闭了session的话就会报这个错,原因很简单,因为是惰性载入时,子表的数据没有在母对象装载的时候装载,而是在你调用get方法的时候hibernate自动通过一个子表查询语句来装载的,而这时你的session已经关闭,那个这查询自然就无法完成,异常

67,513

社区成员

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

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