论坛首页 Java企业应用论坛

Spring中一对多关系的的疑问

浏览 5842 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-03-25  
父类跟子类的之间是一对多的关系,我的DAO是使用HibernateTemplate的,一对多的关系里使用"lazy=true",所以在调用child的方法
public List fetchChilds(Parent parent);{
    getHibernateTemplate();.initialize(parent.getChilds(););;
    return parent.getChilds();;
}

但是调用这个方法的时候一直出现一下异常:
disconnected session; nested exception is net.sf.hibernate.HibernateException: disconnected session" type="org.springframework.orm.hibernate.HibernateSystemException">org.springframework.orm.hibernate.HibernateSystemException: disconnected session; nested exception is net.sf.hibernate.HibernateException: disconnected session
net.sf.hibernate.HibernateException: disconnected session

小弟初学,请不吝赐教,先谢谢了
   发表时间:2005-03-25  
要先refresh一下,然后才能initialize。

session.refresh(parent);;
Hibernate.initialize(parent.getChildren);;
0 请登录后投票
   发表时间:2005-03-31  
robbin 写道
要先refresh一下,然后才能initialize。

session.refresh(parent);;
Hibernate.initialize(parent.getChildren);;


请教一下,为什么要 refresh 一下呢?什麽情况下用 Refresh 操作?
0 请登录后投票
   发表时间:2005-03-31  
tommy_kin 写道
public List fetchChilds(Parent parent){
    getHibernateTemplate().initialize(parent.getChilds());
    return parent.getChilds();
}



这是非常错误的做法,应该改为:
public List fetchChilds(Parent parent){
  return   getHibernateTemplate().find("select p.childs from Parent as p");
}
0 请登录后投票
   发表时间:2005-04-01  
最近在改成srping 1.2版時,也一直遇到lazy init的問題
可不可以請教一下,一般來說,什麼時間要用lazy init
而且要怎樣正確的在spring裡init lazy collection(proxy)
那spring裡的open session in view的filter跟interspector又是做啥用的?
謝謝!~
0 请登录后投票
   发表时间:2005-04-01  
原因是这样的:
getHibernateTemplate()中使用的sesssion可能和最近一次getHibernateTemplate()调入parent时的session不是同一个
如何保证用同一个session呢?spring提供了两个解决方案:
第一:用它的HibernateTransactionManager,把你的service方法声明为transcation的就可以保证两次DAO中用的是同一个session,我们现在就是用这种方式;
第二:用HibernateInterceptor,这个没仔细研究。

不对的请纠正和补充。
0 请登录后投票
论坛首页 Java企业应用版

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