这个空指针异常实在不知道怎么解决了

逍遥兮容与 2012-04-02 09:00:39
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里产生的?
...全文
288 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
牙痴 2012-04-05
  • 打赏
  • 举报
回复
int coutback = (Integer) countbacklist.get(0); is null
zhuangyanxiang 2012-04-05
  • 打赏
  • 举报
回复
楼主我觉得你在定义 private SessionFactory sessionFactory;的时候没有初始化sessionFactory,
而这里 public Session getSession() {
Session session = sessionFactory.openSession();
return session;
}
却调用了sessionFactory的方法,null值哪来的方法.
个人愚见
injuer 2012-04-05
  • 打赏
  • 举报
回复
ForumDAO fdao = new ForumDAO();是你自己管理的不是spring管理的,请让spring管理。
wgg333 2012-04-04
  • 打赏
  • 举报
回复
Query query = session.createQuery(hql); 这句有执行吗
wgg333 2012-04-04
  • 打赏
  • 举报
回复
List countbacklist = query.list();
if(countbacklist.size()!=0)
{
session.close();
int coutback = (Integer) countbacklist.get(0);
return coutback;
}
else
return null;

这要判断下空集的情况
逍遥兮容与 2012-04-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

Query query = session.createQuery(hql); 这句有执行吗
[/Quote]
没有,涉及到countback操作的都出错
[Quote=引用 2 楼 的回复:]

Java code

public Session getSession() {
System.out.println(sessionFactory==null?"true":"false");
Session session = sessionFactory.openSession();
System.out.println(session==null?"true":"fal……
[/Quote]
改怎么解决呢?
逍遥兮容与 2012-04-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

Query query = session.createQuery(hql); 这句有执行吗
[/Quote]
countback是空的不要紧的吧?
coooliang 2012-04-04
  • 打赏
  • 举报
回复
sessionFactory是空的。
逍遥兮容与 2012-04-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

<bean id="baseDAO" class="sunyang.dao.BaseDAO" abstract="true">
我这里没看明白,abstract="true",为什么你的BaseDAO不是抽象的?
public class BaseDAO {
求解释
[/Quote]
额?一定要抽象么?我就把它当父类呀!
sdojqy1122 2012-04-04
  • 打赏
  • 举报
回复
<bean id="baseDAO" class="sunyang.dao.BaseDAO" abstract="true">
我这里没看明白,abstract="true",为什么你的BaseDAO不是抽象的?
public class BaseDAO {
求解释
菖蒲老先生 2012-04-03
  • 打赏
  • 举报
回复
sessionFactory == null
所以导致空指针。。。
sdojqy1122 2012-04-03
  • 打赏
  • 举报
回复

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出问题了。
逍遥兮容与 2012-04-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

Java code

public Session getSession() {
System.out.println(sessionFactory==null?"true":"false");
Session session = sessionFactory.openSession();
System.out.println(session==null?"true":"fal……
[/Quote]
是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;
}
逍遥兮容与 2012-04-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 2 楼 的回复:

Java code

public Session getSession() {
System.out.println(sessionFactory==null?"true":"false");
Session session = sessionFactory.openSession();
System.out.println(session==null……
[/Quote]
	<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语句不一样外,其他都差不多
逍遥兮容与 2012-04-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

Java code

public Session getSession() {
System.out.println(sessionFactory==null?"true":"false");
Session session = sessionFactory.openSession();
System.out.println(session==null?"true":"fal……
[/Quote]
注入了的。。其他也是这么用,就没问题
ovearj 2012-04-03
  • 打赏
  • 举报
回复
at sunyang.dao.BaseDAO.getSession(BaseDAO.java:18)


楼主这怎么都没有18行

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧