我使用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,说明没有内容,这是为什么?
先贴代码: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,说明没有内容,这是为什么?
2-Buy good = (Buy)arraylist.get(i); 这个转化失败了!
return new ActionForward("/failed.jsp");
} lz用的struts怎么还在这里转呢?
这句执行了吗?执行了就没问题的啊
3LSystem.out.println(i); 这一句执行了,但是只执行了一次,即下一句就出现错误了。请问怎么解决?
那基本确定楼主是一对多关系了............
那楼主不应该显示关闭SESSION...........
util.HibernateSessionFactory.closeSession();
这句告诉hibernate,在我执行完query后废弃SESSION,当SESSION被废弃后,那么保存在一级缓存中的GOOD对象信息将也一起被消除,那这样的话,楼主的二级缓存也也在SESSIONFACTORY显示关闭SESSION的时候被消除,那此时,如果继续调用good.getBuy_user()......方法的话,hibernate会试图去缓存中找对应的USERID,如果找不到,则返回NULL.
不然会抱LAZY初始化异常:SESSION WAS CLOSE!