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.   

    原因:
    hibernate3 many-to-one的默认选项是 lazy = "proxy"
    解决方法:
    <many-to-one> & <one-to-many> 中设置 lazy="false"
      

  3.   

    或者LZ参考一下 http://blog.csdn.net/dust_bug/archive/2008/10/28/3163987.aspx
      

  4.   

    加一个过滤器?OpenSessionInViewFilter我今天早上起来查查这个过滤器的功能希望有大侠给解释下Hibernate3里lazy设置的值都是什么意思啊?
      

  5.   

    心里有事就不想去睡在网上搜了一下真有这方面的介绍http://www.blogjava.net/Sunday/archive/2007/08/28/140593.html给大家一个链接我看的有点晕但是我知道你们有人能看明白希望看明白了的人指点我一下啊
      

  6.   

    lazy="proxy" 延迟加载的
    lazy="false"非延迟
    lazy="true"
    session控制的问题
    有4种解决方案 楼主不妨试一下
    这个我也遇到过
    1. connection_commit; 在hibernate.cfg.xml中  
    加入自动提交
    <property name="connection.autocommit">true</property>2.回调  在你的方法中写
    return (Serializable) getHibernateTemplate().executeFind(new HibernateCallback(){ public Object doInHibernate(Session session)
    throws HibernateException, SQLException {
    Hibernate.initialize();
    return null;
    }});
    3
    web.xml原始配置:
     <!-- 过滤spring中对于hibernate的session关闭管理 -->
     <filter>
      <filter-name>hibernateFilter</filter-name>
      <filter-class>
       org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
      </filter-class>
     </filter>
    4 还有一个在spring事物中定义 但我没有试过
      

  7.   

    lazy="true" 用到的时候再去查询数据库,
    lazy="false" 将对象的所有属性查询出来一次性组装上,效率低
      

  8.   

    lazy=proxy是通过代理方式来加载(自动判断),默认的
    lazy=true是用的时候才去加载
    lazy=false是不使用延迟加载,即实时加载若使用延迟加载,普通的session在关闭调用数据库的方法后会自动关闭,这个时候无法获取关联数据。使用OpenSessionInViewFilter后,在调用数据库方法关闭后session并不是立刻关闭,而是一直到当前request请求完成(即从页面请求到action或servlet,再操作数据库,最后返回结果到页面显示出来)才关闭session。
      

  9.   

    Hibernate的检索策略包括类级别检索策略和关联级别检索策略。 类级别检索策略有立即检索和延迟检索,默认的检索策略是立即检索。在Hibernate映射文件中,通过在<class>上配置 lazy属性来确定检索策略。对于Session的检索方式,类级别检索策略仅适用于load方法;也就说,对于get、qurey检索,持久化对象都会被立即加载而不管lazy是false还是true.一般来说,我们检索对象就是要访问它,因此立即检索是通常的选择。由于load方法在检索不到对象时会抛出异常(立即检索的情况下),因此我个人并不建议使用load检索;而由于<class>中的lazy属性还影响到多对一及一对一的检索策略,因此使用load方法就更没必要了。 关联级别检索策略有立即检索、延迟检索和迫切左外连接检索。对于关联级别检索,又可分为一对多和多对多、多对一和一对一两种情况讨论。 一对多和多对多关联关系一般使用<set>配置。<set>有lazy和outer-join属性,它们的不同取值绝对了检索策略。 1)立即检索:这是一对多默认的检索策略,此时lazy=false,outer-join=false.尽管这是默认的检索策略,但如果关联的集合是无用的,那么就不要使用这种检索方式。 2)延迟检索:此时lazy=true,outer-join=false(outer-join=true是无意义的),这是优先考虑的检索方式。 3)迫切左外连接检索:此时 lazy=false,outer-join=true,这种检索策略只适用于依靠id检索方式(load、get),而不适用于query的集合检索(它会采用立即检索策略)。相比于立即检索,这种检索策略减少了一条sql语句,但在Hibernate中,只能有一个<set>配置成 outer-join=true. 多对一和一对一检索策略一般使用<many-to-one>、<one-to-one>配置。<many- to-one>中需要配置的属性是 outer-join,同时还需要配置one端关联的<class>的lazy属性(配置的可不是<many-to-one>中的lazy哦),它们的组合后的检索策略如下: 1) outer-join=auto:这是默认值,如果lazy=true为延迟检索,如果lazy=false为迫切左外连接检索。 2) outer-join=true,无关于lazy,都为迫切左外连接检索。 3) outer-join=false,如果lazy=true为延迟检索,否则为立即检索。 可以看到,在默认的情况下(outer-join=auto,lazy=false),对关联的one端对象Hibernate采用的迫切左外连接检索。依我看,很多情况下,我们并不需要加载one端关联的对象(很可能我们需要的仅仅是关联对象的id);另外,如果关联对象也采用了迫切左外连接检索,就会出现select语句中有多个外连接表,如果个数多的话会影响检索性能,这也是为什么Hibernate通过 hibernate.max_fetch_depth属性来控制外连接的深度。对于迫切左外连接检索,query的集合检索并不适用,它会采用立即检索策略。 对于检索策略,需要根据实际情况进行选择。对于立即检索和延迟检索,它们的优点在于select语句简单(每张表一条语句)、查询速度快,缺点在于关联表时需要多条select语句,增加了访问数据库的频率。因此在选择即检索和延迟检索时,可以考虑使用批量检索策略来减少select语句的数量(配置batch-size属性)。对于切左外连接检索,优点在于select较少,但缺点是select语句的复杂度提高,多表之间的关联会是很耗时的操作。另外,配置文件是死的,但程序是活的,可以根据需要在程序里显示的指定检索策略(可能经常需要在程序中显示指定迫切左外连接检索)。为了清楚检索策略的配置效果如何,可以配置show_sql属性查看程序运行时Hibernate执行的sql语句。
      

  10.   

    lazy initialization
    集合(不包括数组)是可以延迟初始化的,意思是仅仅当应用程序需要访问时,才载入他们的值。
    s = sessions.openSession();
    User u = (User) s.find("from User u where u.name=?", userName,
    Hibernate.STRING).get(0);
    Map permissions = u.getPermissions();
    s.connection().commit();
    s.close();
    Integer accessLevel = (Integer) permissions.get("accounts"); //Error!
    因为在commit之前,permissions没有被用到,permission没有被初始化,而session被close了,导致permissions永远都无法load data.
    解决办法:吧最后一行一道session被提交之前.
    设置:
    <set name="names" table="NAMES" lazy="true" order-by="name asc">
    <key column="group_id"/>
    <element column="NAME" type="string"/>
    </set>==================================在做Spring1.2 + Hibernate 3 + struts demo时候遇到一个问题,编辑用户数据时候用com.jeedev.service.dao.hibernate.UserHibernateDao 中 public TSysuser getUser(int userid) { } 方法,总是不能正常显示编辑数据。具体表现为:参考 com.jeedev.service.dao.hibernate.UserHibernateDao 第32-45行 java代码: 
     public TSysuser getUser(int userid) {  if (this.getHibernateTemplate() == null) { 
     System.out.println("error at there"); 
     return null; 
     }  TSysuser edituser= (TSysuser) getHibernateTemplate().load(TSysuser.class, new Integer(userid));  System.out.println(edituser.getUsername()); 
     System.out.println(edituser.getDeptno());  return edituser; 
     }
     如果删除上面的 
    java代码: 
     System.out.println(edituser.getUsername()); 
     System.out.println(edituser.getDeptno());在点击编号,修改时候就会出现错误: 2005-10-27 15:35:59,245 ERROR [org.hibernate.LazyInitializationException] - could not initialize proxy - the owning Session was closed 
    org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed 经过在javaeye论坛大家一致认为 是hibernate lazy的原因在WEB级别应用时候,会出现意想不到的lazy错误,解决方法就是 设置 lazy="false" 例:<hibernate-mapping> <class name="com.jeedev.hb.TSysuser" table="t_sysuser" lazy="false">Copy from others.
    应该是你的问题解答
    Both are ZT. :)