今天在做hibernate分页时遇到一个奇怪的问题,我在一的一端加载数据能够在Web端显示出来
  调用的方法
   public List  getTestClassList(int pagesize,int currow) {
     log.debug("get page data");
      List vehicleList = null;
      Session session = this.getSession();
      Transaction transaction= session.beginTransaction();
      try{
      Query q=session.createQuery("from TestClass");
      q.setFirstResult(currow);
      q.setMaxResults(pagesize);
      vehicleList=q.list();
      session.flush();
      return vehicleList;
      }catch(RuntimeException re){
       log.error("get page data failed", re);
throw re;
      }finally{
       transaction.commit();
       session.close();
      }
  }但是在多的一端加载数据时也调用相同的方法,把TestClass换成多的一端的实体类进行调用,结果能显示出调用的sql
但是却抱了一个错误
[ERROR] 2009-03-21 04:19:29 org.hibernate.LazyInitializationException - could not initialize proxy - the owning Session was closed
org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed
为什么加载一的一端可以显示出来,调用多的一端就不能显示出来了。而且我在多的一端也加了lazy=false属性。

解决方案 »

  1.   

    lazy="false"就OK
    <set name="students" inverse="true" cascade="all" lazy="false">
    <key column="classesid"/>
    <one-to-many class="Student"/>
    </set>
      

  2.   

    你试下遍历list,调用Hibernate.initialize(TestClass.get....)把TestClass多对一的对象初始化一下!应该就OK拉!
      

  3.   

    再映射文件中设置lazy="false" 就行了~因为它默认的是延迟加载,你的session已经闭了的时候,要调用数据时就会出现你所说的那咱错误了
      

  4.   

    session不能关,不然lazy="true"无法起作用,还有就是你那个Transaction 我不知道在查询里面 用事务处理有什么用。