2007-08-23
使用DWR,hibernate的annotation的lazy属性失效,为何?
关键字: dwr,hibernate,annotation,lazy我先说用了几个框架吧,spring,hibernate,dwr,然后bean用的是annotation标记的:
其中商品和订单表,我用的是一对多
其中商品和订单表,我用的是一对多
Product bean
- @OneToMany(targetEntity = Order.class, cascade = CascadeType.REMOVE, fetch = FetchType.LAZY)
- @JoinColumn(name = "PRODUCTID")
- public List<Order> getOrders() {
- return orders;
- }
在DAO层里,我用了spring的hibernateDaoSupport,其中有个分页查询方法:
java 代码
- /**
- * 根据页码和每页的长度返回对象集合
- *
- * @param pageNo
- * 页码
- * @param pageSize
- * 每页的长度
- * @return
- */
- public Page<T> PageQuery(int pageNo,int pageSize){
- Criteria criteria = this.createCriteria();
- return this.pagedQuery(criteria, pageNo, pageSize);
- }
方法返回的page,我自己定义的一个封装了页面属性和内容的bean。
然后定义了一个service层的方法,调用DAO层的这个分页函数。
java 代码
- public List<Product> getProducts(int pageNo,int pageSize){
- return productDAO.PageQuery(pageNo, pageSize).getResult();
- }
JSP页面使用DWR调用service层的getProducts
xml 代码
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr//dwr20.dtd">
- <dwr>
- <allow>
- <create javascript="ProductService" creator="spring">
- <param name="beanName" value="productService"></param>
- <include method="loadProduct" />
- <include method="getProducts" />
- </create>
- </allow>
- </dwr>
再定义了JS函数
js 代码
- window.onload = function(){
- ProductService.getProducts(1,10,displayProducts);
- }
- function displayProducts(products){
- DWRUtil.removeAllRows("items");
- if (items.length == 0) {
- alert("No matching products found");
- $("products").style.visibility = "hidden";
- } else {
- DWRUtil.addRows("items",products,cellFunctions);
- $("products").style.visibility = "visible";
- }
- }
- /*
- * Array of functions to populate a row of the items table
- * using DWRUtil's addRows function
- */
- var cellFunctions =[
- function(product){return product.productname},
- function(product){return product.productdetail},
- function(product){return product.price},
- function(product) {
- var btn = document.createElement("button");
- btn.innerHTML = "Add to cart";
- btn.productId = product.id;
- btn.onclick = addToCartButtonHandler;
- return btn;
- }
- ];
评论
smalltiger1984
2008-05-05
知道了,原来是我<convert converter="bean" match="edu.erp.emp.bean.EmpBO" />这个配置有问题 ,要改成<convert converter="hibernate3" match="edu.erp.emp.bean.EmpBO" />
smalltiger1984
2008-05-05
能说一下怎么限制呢!
<create creator="spring" javascript="AjaxEmpService">
<param name="beanName" value="AjaxEmpService" />
<include method="sub_deploy" />
<include method="findEmp"/>
</create>
我这里也写了,可他还是会把子表里的全抓出来,能说一下你是怎么配的吗
<create creator="spring" javascript="AjaxEmpService">
<param name="beanName" value="AjaxEmpService" />
<include method="sub_deploy" />
<include method="findEmp"/>
</create>
我这里也写了,可他还是会把子表里的全抓出来,能说一下你是怎么配的吗
xianglg
2007-08-27
找到原因了,我在convter的时候,param没有做"include",这样所有属性都为白名单,我做了限制后,问题解决!!
cats_tiger
2007-08-24
你有没有在dwr.xml中为Product和Order加converter?前面贴的代码好像没有。
提个建议,java代码中return之前最好把每个bean都evict一下或者转换为Map,可以写一个通用的转换函数或用beanUtils。如果不这样处理,由于打开着session,DWR会迫使Hibernate把能加载的数据都加载,尤其是在关联关系多的时候。
提个建议,java代码中return之前最好把每个bean都evict一下或者转换为Map,可以写一个通用的转换函数或用beanUtils。如果不这样处理,由于打开着session,DWR会迫使Hibernate把能加载的数据都加载,尤其是在关联关系多的时候。
xianglg
2007-08-24
cats_tiger 写道
web.xml里面加Open Session In View Filter了吗?URL-Mapping设置:/dwr/*
原来的URL-Mapping设置:/*,改成你的设置,问题依旧
xianglg
2007-08-24
cats_tiger 写道
web.xml里面加Open Session In View Filter了吗?URL-Mapping设置:/dwr/*
原来就已经设置了,URL-Mapping设置:/*,改成你的设置,问题依旧
cats_tiger
2007-08-24
web.xml里面加Open Session In View Filter了吗?URL-Mapping设置:/dwr/*
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 13042 次
- 性别:

- 来自: 杭州

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
使用DWR,hibernate的an ...
知道了,原来是我<convert converter="bean" mat ...
-- by smalltiger1984 -
使用DWR,hibernate的an ...
能说一下怎么限制呢! <create creator="spring" j ...
-- by smalltiger1984 -
struts2+hibernate+spring ...
恩。很有帮助,辛苦啦
-- by wjhandboy -
struts2+hibernate+spring ...
期待下一篇啊!
-- by zgh207 -
使用struts2+prototype.js ...
感觉你受到struts1.X的影响。
-- by apple0668






评论排行榜