一种配置情况是:<convert converter="bean" match="com.hengyu.bean.project.*" />
大家都知道,当hibernate里面配置上lazy="true"时,查询对象A时,不会去查询于A相关联的B、C、D等对象,只要取B、C、D中属性值时,才会去查询。但是hibernate配合DWR时,这个lazy属性好象不起作用,只要一查询,就会把于之相关联的属性全部加载,执行一个方法,竟然有上百条HQL语句,使效率极其低下。
另一种配置是:<convert converter="hibernate3" match="com.hengyu.bean.project.*" />这样的话效率很快,但是当我去于A相关联的B、C等表里的属性时,却取不到。配置了opensessioninview,其他表中的属性仍然取不到。郁闷了半月了,请高手指教。 web.xml
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filterclass>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>OpenSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
大家都知道,当hibernate里面配置上lazy="true"时,查询对象A时,不会去查询于A相关联的B、C、D等对象,只要取B、C、D中属性值时,才会去查询。但是hibernate配合DWR时,这个lazy属性好象不起作用,只要一查询,就会把于之相关联的属性全部加载,执行一个方法,竟然有上百条HQL语句,使效率极其低下。
另一种配置是:<convert converter="hibernate3" match="com.hengyu.bean.project.*" />这样的话效率很快,但是当我去于A相关联的B、C等表里的属性时,却取不到。配置了opensessioninview,其他表中的属性仍然取不到。郁闷了半月了,请高手指教。 web.xml
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filterclass>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>OpenSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
像下面这样,把每个bean的需要显示的字段都自己定义出来,看一下还会不会有那么多sql,
我觉得可能是dwr把你的bean的每个属性都get了,包括延迟加载的Set,不过只是猜测,没有试过
<convert match="xxx.domain.GoodsType" converter="bean">
<param name="include" value="id,typeName"/>
</convert>
<convert match="xxx.domain.Goods" converter="bean">
<param name="include" value="id,typeName"/>
</convert>
.....
DWR调用方法
服务器端:
service某类中处理相关方法--->dao中执行数据库操作。
就是说dao层中的方法有出入,和DWR没有关系。
你单独执行一下dao层中的方法,看看是否也出现这样的错误。
如果是convert Vo的话,肯定没有问题
发现一个帖子
--------------------------------
所有的源码基本上就是这些,我使用单元测试时,lazy效果已经有了!但是我访问页面,通过dwr调用service层方法,好像却失效了,通查询查看hibernate日志,看到与之相关的所有select语句,全部打印了出来!
-------------------
找到原因了,我在convter的时候,param没有做"include",这样所有属性都为白名单,我做了限制后,问题解决!!
----------------------------------------------
<%= A.getB().getName();%>
你这里的取法是在jsp内嵌java代码,jsp编译成servlet后,执行这一段java代码的时候,这个时候的session还没有关闭你前面说的通过dwr取不到,是在请求结束后,js对象的属性取不到,和这个不是一回事
<param name="include" value="id,typeName"/>
</convert> 就可以了