java.lang.NullPointerException
at sunyang.dao.BaseDAO.getSession(BaseDAO.java:18)
at sunyang.dao.impl.ForumDAO.countBack(ForumDAO.java:94)
at sunyang.dao.impl.ReforumDAO.delete(ReforumDAO.java:86)
at sunyang.service.ForumService.deleteReforum(ForumService.java:82)
at sunyang.action.ForumAction.deleteReforum(ForumAction.java:141)下面是按报错的顺序的代码public class BaseDAO {
private SessionFactory sessionFactory; public SessionFactory getSessionFactory() {
return sessionFactory;
} public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
} public Session getSession() {
Session session = sessionFactory.openSession();
return session;
}
}
public Integer countBack(int forum_id) {
Session session = getSession();
String hql = "select forum.countback from Forum forum where forum.id=?";
Query query = session.createQuery(hql);
query.setParameter(0, forum_id);
List coutbacklist = query.list();
session.close();
int coutback = (Integer) coutbacklist.get(0);
return coutback;
} public boolean delete(int reforum_id, int forum_id) {
try {
String hql = "delete from Reforum reforum where reforum.id="+reforum_id;
Session session = getSession();
Transaction tx = session.beginTransaction();
Query querydeleteReforum = session.createQuery(hql);
int b=querydeleteReforum.executeUpdate();
tx.commit();
session.close();
ForumDAO fdao = new ForumDAO();
int countback = fdao.countBack(forum_id);
fdao.removeCountBack(countback, forum_id);
if (b != 0) {
return true;
} else {
return false;
} } catch (Exception e) {
e.printStackTrace();
}
return false;
} public void deleteReforum(int reforum_id, int forum_id) {
try {
rfdao.delete(reforum_id, forum_id);
} catch (Exception e) {
e.printStackTrace();
}
} public String deleteReforum() {
try {
//Map request = (Map) ActionContext.getContext().get("request");
forumservice.deleteReforum(Integer.parseInt(request.getParameter("reforum_id")),
Integer.parseInt(request.getParameter("forum_id")));
forum_id = Integer.parseInt(request.getParameter("forum_id")); } catch (Exception e) {
e.printStackTrace();
}
return "success";
}其他的action也是这么用的没问题,就这个有问题,比较郁闷,这个
public Session getSession() {
Session session = sessionFactory.openSession();
return session;
}
Session是从sessionFactory得到的,这个异常是sessionFactory里产生的?

解决方案 »

  1.   

    at sunyang.dao.BaseDAO.getSession(BaseDAO.java:18)
    楼主这怎么都没有18行
      

  2.   


    public Session getSession() {
    System.out.println(sessionFactory==null?"true":"false");
            Session session = sessionFactory.openSession();
    System.out.println(session==null?"true":"false");
            return session;
        }你sessionFactory注入了吗?如果打印为true,说明是sessionFactory出问题了。
      

  3.   

    sessionFactory == null
    所以导致空指针
      

  4.   

    <bean id="baseDAO" class="sunyang.dao.BaseDAO" abstract="true">
    <property name="sessionFactory">
    <ref bean="sessionFactory" />
    </property>
    </bean>
    <bean id="userdao" class="sunyang.dao.impl.UserInfoDAO" parent="baseDAO"></bean>
    <bean id="fdao" class="sunyang.dao.impl.ForumDAO" parent="baseDAO"></bean>
    <bean id="rfdao" class="sunyang.dao.impl.ReforumDAO" parent="baseDAO"></bean>比较郁闷的是,我其他七个也这么用的呀,除了HQL语句不一样外,其他都差不多
      

  5.   

    是true,这到底是为什么。。
    下面两个方法基本差不多呀
    // 计算回帖数目
    public Integer countBack(int forum_id) {
    Session session = getSession();
    String hql = "select forum.countback from Forum forum where forum.id=?";
    Query query = session.createQuery(hql);
    query.setParameter(0, forum_id);
    List countbacklist = query.list();
    session.close();
    int coutback = (Integer) countbacklist.get(0);
    return coutback;
    } // 增加回帖数目
    public Integer addCountBack(int countback, int forum_id) {
    Session session = getSession();
    String hql = "update Forum forum set forum.countback="
    + (countback + 1) + "where forum.id=" + forum_id;
    Transaction tx = session.beginTransaction();
    Query queryupdate = session.createQuery(hql);
    queryupdate.executeUpdate();
    tx.commit();
    session.close();
    return 0;
    }
      

  6.   

    Query query = session.createQuery(hql);  这句有执行吗 
      

  7.   

    没有,涉及到countback操作的都出错
    改怎么解决呢?
      

  8.   

    List countbacklist = query.list();
    if(countbacklist.size()!=0)
    {
            session.close();
            int coutback = (Integer) countbacklist.get(0);
            return coutback;
    }
    else
    return null;这要判断下空集的情况
      

  9.   

    <bean id="baseDAO" class="sunyang.dao.BaseDAO" abstract="true">
    我这里没看明白,abstract="true",为什么你的BaseDAO不是抽象的?
    public class BaseDAO {
    求解释
      

  10.   

    ForumDAO fdao = new ForumDAO();是你自己管理的不是spring管理的,请让spring管理。
      

  11.   

    楼主我觉得你在定义 private SessionFactory sessionFactory;的时候没有初始化sessionFactory,
    而这里  public Session getSession() {
            Session session = sessionFactory.openSession();
            return session;
        }
    却调用了sessionFactory的方法,null值哪来的方法.
    个人愚见
      

  12.   

    int coutback = (Integer) countbacklist.get(0); is null