<set name="products" 
         table="advertiserSelectProducts" 
         lazy="true"
         order-by="productId desc"
         cascade="delete">
         <key column="advertiserId" />
         <many-to-many class="com.andrew.po.Product" column="productId" />
        </set>lazy="true"这样设置的话,getProducts时候会出
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role 这个错但lazy="false"虽然可以解决问题,但非常影响性能,会生成很多多余的查询语句请问高人如何解决这个问题?网上已经有人说:
"其实还有一个方法,就是你在load出来对象的时候,调用:hibernate.intialize(object).以后你再调用这个对象的关联对象时,就不会有exception了。"
但不明白具体什么意思.

解决方案 »

  1.   

    lazy="true"时,集合延迟加载了,所以当你getProducts的时候,session可能已经关闭了,所以出现异常;lazy="false"时,不采用延迟加载,也就是一次性把所以相关联对象全部查询出来,
    可以使用spring的OpenSessionInViewFilter解决
      

  2.   

    你可以在事务关闭前先得到这个Products对象,即在事务关闭前,先调用getProducts(),即可!