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里产生的?
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里产生的?
解决方案 »
- 如何来捕获框架异常?
- struts2中request.getrequestdispatcher()如何访问action
- 源码阅读调查
- struts2新手入门问题,请教
- jboss工程移植到Tomcat 报异常怎么解决
- 大家有没有开发项目的进度表
- 中文乱码问题
- 向高手求教!100分!!困惑~~
- ====有奖竟猜====灰熊Vs火箭=== 截止时间:4月12日-10点59分
- 创建一个普通的Mybatis程序报错 Communications link failure
- ServletActionContext.getRequest().getRealPath(savePath)做什么用的
- servlet 多线程问题 求高手指教啊
楼主这怎么都没有18行
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出问题了。
所以导致空指针
<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语句不一样外,其他都差不多
下面两个方法基本差不多呀
// 计算回帖数目
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;
}
改怎么解决呢?
if(countbacklist.size()!=0)
{
session.close();
int coutback = (Integer) countbacklist.get(0);
return coutback;
}
else
return null;这要判断下空集的情况
我这里没看明白,abstract="true",为什么你的BaseDAO不是抽象的?
public class BaseDAO {
求解释
而这里 public Session getSession() {
Session session = sessionFactory.openSession();
return session;
}
却调用了sessionFactory的方法,null值哪来的方法.
个人愚见