论坛首页 Java企业应用论坛

[求教]关于DWR+Spring延迟加载的问题

浏览 10800 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-11-09   最后修改:2009-11-10
百事通信息网

今天用DWR+Spring做整合时,发现不能通过DWR实现延迟加载,仅管在session关闭前已经做过初始化Hibernate.initialize(article.getUser());,不过还是会报session已被关闭.这个问题怎么解决呢

测试了一下
将要延迟的对象在dwr.xml中配转换
将PO中数据取出来放到集合,将集合返回给客户端,这样就不会出错 
   发表时间:2006-11-09  
个人见解:

对于你需要的实体,DWR所作的操作是在页面进行的,也就是说很有可能这些动作已经不再是session-per-request的能力范围了。所以,此时对数据的延迟加载(lazy associations)操作你就有可能会得到Session已经关闭的提示。
0 请登录后投票
   发表时间:2006-11-09  
说到了问题的关键,那怎么样解决呢?
0 请登录后投票
   发表时间:2006-11-09  
还有一个问题是
举例说明:
如果表A跟表B是1:n关系,表B跟表C也是1:n的关系,我将A的PO转给客户端,用DWR调试,发现不但会加载B还会加载C
0 请登录后投票
   发表时间:2006-11-09  
wiley 写道
还有一个问题是
举例说明:
如果表A跟表B是1:n关系,表B跟表C也是1:n的关系,我将A的PO转给客户端,用DWR调试,发现不但会加载B还会加载C


你的dwr.xml配置文件怎么写的
0 请登录后投票
   发表时间:2006-11-09  
我现在的一个解决办法:
1、在DWR.xml配置转换POJO时指定他的属性(不指定关联的属性);
2、在处理对象的方法中,如果查询的对象是多表关联的,那么不直接返回该POJO,而是处理后,用MAP返回。
如:
function Map getA(String a){
    A a=this.AService.getAById(id);
   B b=a.getB();
   HashMap<String, Serializable> hm=new HashMap<String, Serializable>();
   hm.put("a",a);
   hm.put("b",b);
   return hm;
}

这样二个问题都解决了,我想应该有比这个更好的方法,希望大家也谈谈自已的做法,相互学习一下
0 请登录后投票
   发表时间:2006-11-10  
public class DTO{
A a;
B b;
....
}
0 请登录后投票
   发表时间:2007-06-28  
    <filter>
        <filter-name>hibernateFilter</filter-name>
        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
        <init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
    </filter>


     <filter-mapping>
        <filter-name>hibernateFilter</filter-name>
        <url-pattern>/dwr/*</url-pattern>      
    </filter-mapping>
0 请登录后投票
   发表时间:2007-06-30  
用HIBERNATE的转换器 未初始化的对象不会被翻译成JSON 爽的很。。 需要初始化的对象可在返回之前从SESSION脱钩。。
0 请登录后投票
   发表时间:2007-07-16  
试过 BeanConverter么?
http://getahead.org/dwr/server/hibernate
看对你有没有帮助
0 请登录后投票
论坛首页 Java企业应用版

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