lazy设置成proxy 是默认行为
其他的就不清楚了

解决方案 »

  1.   

    在web.xml里加句   <filter>
         <filter-name>hibernateFilter</filter-name>
         <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
       </filter>
      
       <filter-mapping>
         <filter-name>hibernateFilter</filter-name>
         <url-pattern>/*</url-pattern>
       </filter-mapping>
    试试不过不一定保证行的,还要看集成环境,LZ是否同时还在用着struts?struts1.x跟2.x配置又不太一样如果只是测试hp环境,可以手动flush下
      

  2.   

    Spring 为什么要这么做?
    因为Spring是“保姆”,“管家婆”
    他什么都要管的 
    哈哈
      

  3.   

    项目中遇到这样的的问题肯定不能在 <set>和 <one-to-many>都加上lazy="false" ,这样性能影响很大,比较好的做法是在hibernate 支持的hql查询的时候用连接查询,或者是在数据库做一个视图。
    最简单的方法是这样的: 
    select * from someTable; 也可能用另一种方法: 
    select id from someTable; 
    for each id: 
       select * from someTable where id=someID; 那么到底哪种性能好呢?这就要具体问题具体分析了。 很可能你取回来的这些POJO中,只会用到其中的主键字段,那么你一口气把所有的字段都取回来,当然不好。 
    再假如你只需要处理其中的一部分数据,全部取出来当然也是浪费。 这时候,延迟加载就派上用场了。开始的时候只取出其中的主键字段,然后再需要的时候再获取其中具体的某个值。 proxy则是为了避免select *而产生的。 那么,lazy load和proxy到底是否能够提高效率呢?不能一概而论,要看代价。 
    lazy load的代价就是把一次SQL分成了N+1次。假若你确信你所需的集合类中每一行都会用到,那么结论是用lazy load并不会更快。因为多次执行preparedStatment开销很大,还不如一次取回result set。 
      

  4.   

    对,加个过滤器,将session延迟到页面再关闭,因为只要当前session不关闭,就可以再次去查询数据库