解决this.getHibernateTemplate().save();报空指针异常问题

在SSH整合的小例子中,使用HibernateTemplate.save()方法时遇到了空指针异常。问题出在Action中直接new CuserBiz对象,而非通过Spring管理,导致无法注入sessionFactory。解决方法是改为通过setter注入CuserBiz,让对象受Spring管理,从而避免空指针错误。

接上篇博文
在整合ssh写了一个小例子的时候出现了这个问题:
代码如下
package com.crm.biz;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.crm.info.Cuser;

@Transactional
@Service(“cuserBiz”)
public class CuserBiz extends HibernateDaoSupport{

public void add(Cuser cuser){
    System.out.println(cuser.getCrm_name());
    System.out.println("--------------");
    try{
        this.getHibernateTemplate().save(cuser);
    }catch(Exception e){
        e.printStackTrace();
    }
}

}

我在运行的时候this.getHibernateTemplate().save(cuser);这一块报指针异常的情况;后来经过长时间的调试,终于找到了问题所在;
一开始我在Action中是这样创建的CuserBiz类,代码如下
package com.crm.action;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.crm.biz.CuserBiz;
import com.crm.info.Cuser;
import com.opensymphony.xwork2.ActionSupport;

@Scope(“prototype”)
@Controller(“cuserAction”)
public class CuserAction extends ActionSupport{
/**
*
*/

private static final long serialVersionUID = 1L;
private Cuser cuser;

public Cuser getCuser() {
    return cuser;
}

public void setCuser(Cuser cuser) {
    this.cuser = cuser;
}

public String add(){
    System.out.println(userBiz);
    System.out.println(cuser.getCrm_name());
    new CuserBiz().add(cuser);
    return "cc";
}

}

直接new的CuserBIz对象,这样一来创建对象就不经过spring管理,所以创建的一个新的对象,我们都知道spring配置文件中将sessionFactory注入给HibernateDaoSupport,然后就可以通过getHibernateTemplate来获得HibernateTemplate;
但是上面调用的add方法的时候直接是new的CuserBiz对象故没有依赖注入,所以自然而然的this.getHibernateTemplate().save(cuser);会报空指针错误;
只要把new CuserBiz改成CuserBiz userBiz写上set方法就可以了;如下
package com.crm.action;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.crm.biz.CuserBiz;
import com.crm.info.Cuser;
import com.opensymphony.xwork2.ActionSupport;

@Scope(“prototype”)
@Controller(“cuserAction”)
public class CuserAction extends ActionSupport{
/**
*
*/

private static final long serialVersionUID = 1L;
private Cuser cuser;
private CuserBiz userBiz;

public void setCuserBiz(CuserBiz cuserBiz) {
    this.userBiz = cuserBiz;
}

public Cuser getCuser() {
    return cuser;
}

public void setCuser(Cuser cuser) {
    this.cuser = cuser;
}

public String add(){
    System.out.println(userBiz);
    System.out.println(cuser.getCrm_name());
    userBiz.add(cuser);
    return "cc";
}

}
此也是我看到另一片博文才想到的,链接如下:
http://blog.youkuaiyun.com/gladiator_wyj/article/details/54915403
写此篇博文希望对大家有所帮助,也给自己的一个记录吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值