我使用hql语句遇到一个这样的问题,不知道大家遇到过没?
先贴代码:DAO中代码
public ArrayList getBuyRecordById(String name){
Session session=util.HibernateSessionFactory.getSession();
ArrayList array=new ArrayList();
  String selectHQL="from Buy buy where buy_user ='"+ name + "'";
  Query qy=session.createQuery(selectHQL);   
  List list=qy.list();
  for(int i=0;i<list.size();i++){
  Buy good=(Buy)list.get(i);
  array.add(good);
  }
  util.HibernateSessionFactory.closeSession();
return array;
}
Action中的代码:
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
DynaActionForm thisForm = (DynaActionForm) form;
User user = (User) request.getSession().getAttribute("user"); if (user == null) {
return new ActionForward("/failed.jsp");
}
String name = user.getUser_name();
BuyDAO bdao = new BuyDAO();
ArrayList arraylist = new ArrayList();
arraylist = bdao.getBuyRecordById(name);

request.getSession().setAttribute("arraylist", arraylist); for (int i = 0; i < arraylist.size(); i++) {
System.out.println(i);
Buy good = (Buy)arraylist.get(i);
System.out.println(good.getBuy_user() + "   sssssssssssssssss");
}

return new ActionForward("/mode_userBuyHistory.jsp");
}
加红的那一段出错误,显示ArrayList中有size不为0,但是运行至System.out.println(good.getBuy_user() + "   sssssssssssssssss");时发生java.lang.NullPointerException,说明没有内容,这是为什么?

解决方案 »

  1.   

    1-bdao.getBuyRecordById(name)返回了null、
    2-Buy good = (Buy)arraylist.get(i); 这个转化失败了!
      

  2.   

    if (user == null) { 
    return new ActionForward("/failed.jsp"); 
    } lz用的struts怎么还在这里转呢?
      

  3.   

    System.out.println(i); 
    这句执行了吗?执行了就没问题的啊
      

  4.   

    2L怎么解决问题呢?
    3LSystem.out.println(i); 这一句执行了,但是只执行了一次,即下一句就出现错误了。请问怎么解决?
      

  5.   

    good.getBuy_user()......
    那基本确定楼主是一对多关系了............
    那楼主不应该显示关闭SESSION...........
    util.HibernateSessionFactory.closeSession(); 
    这句告诉hibernate,在我执行完query后废弃SESSION,当SESSION被废弃后,那么保存在一级缓存中的GOOD对象信息将也一起被消除,那这样的话,楼主的二级缓存也也在SESSIONFACTORY显示关闭SESSION的时候被消除,那此时,如果继续调用good.getBuy_user()......方法的话,hibernate会试图去缓存中找对应的USERID,如果找不到,则返回NULL.
      

  6.   

    补充:如果楼主需要在关闭SESSION后继续对另外一方进行操作..........那楼主应该对要操作的另外一方施行LAZY加载.........
    不然会抱LAZY初始化异常:SESSION WAS CLOSE!