任何在你打开hibernate的session后,如果操作执行完毕,都是需要将session关闭的。

解决方案 »

  1.   

    如果查询后关闭session了,那么session查询出来的对象不能get集合吗?
    比如 我查出来个Firstkind类型的对象赋值给firstkind  firstkind.getSecondkinds().size()的时候就会出现问题
                    FirstkindDAO firstkindDAO=new FirstkindDAO();
    List firstkindList=firstkindDAO.findAll();
    if(firstkindList.size()==0){
    request.setAttribute("error","一级新闻栏目为空");
    return mapping.getInputForward();
    }
    Firstkind firstkind=new Firstkind();
    boolean hasSecondkind=false;
    Iterator ite=firstkindList.iterator();

    while(ite.hasNext()){
    firstkind=(Firstkind)ite.next();

                            //下面一行如果不关session就没问题,如果关session就有问题
    if(!firstkind.getSecondkinds().isEmpty()){
    if(firstkind.getSecondkinds().size()>0){
    //firstkind=(Firstkind)ite.next();
    hasSecondkind=true;
    break;
    }
    }
    }
      

  2.   

    反正打开session后,是肯定要关闭的
    不关闭肯定会出问题
      

  3.   


    firstkind.getSecondkinds().size()出错 可能是 firstkind.getSecondkinds()得到的集合为空
    应该先对 firstkind.getSecondkinds()进行一下判断
      

  4.   


    firstkind.getSecondkinds().size()出错 可能是 firstkind.getSecondkinds()得到的集合为空 
    应该先对 firstkind.getSecondkinds()进行一下判断6楼,
    如果我查询后关闭session
    firstkind.getSecondkinds()就是空如果查询后不关闭session
     firstkind.getSecondkinds()就是有值。firstkind.getSecondkins().size();也有值,
      

  5.   

    更改数据库以后 记得使用session的flush 
      

  6.   

    查询后关闭如果session
    查询的数据还是持久状态的吗?
      

  7.   


    提交事物 不就已经 flush()了吗?
      

  8.   

    获得的对象内部有其他对象或者是一个集合,集合内放的是其他对象,.
    Hibernate默认是延迟加载的,也就是说只有你用到你获取的对象内的其他对象属性的时候 Hibernate才回去加载..如果那个时候你的session已经关闭了 就报错了..如果你希望session关闭以后还可以读到你要获取对象内部的其他对象,那就用立即加载模式,就是载入一个对象的时候,立刻载入和他向关联的所有对象.或者是你读到对象以后 在session关闭之间 调用session.persist(Object obj)(obj为你取得对象 Hibernate回自动帮你把所有内部对象从数据库中读出来)或者调用 Hibernate.nitialize(Object obj)(这里obj是你要立刻加载的对象的内部属性,用对象.get名字()获得)这样你关闭session以后内部的集合属性就不会是空指针了
      

  9.   

    session 不关闭的原因!