日期:2014-05-20  浏览次数:20757 次

hibernate 调用方法时单步执行到th.setIfTemp(Long.parseLong(ifTemp));出现空指针 为什么谢谢
public int updateCpnstWS(String serviceNo, String ifTemp, String ifLast,String bizFlag) {
System.out.println("Call Mathod : updateCpnstWS");
Session session = HibernateSessionFactory.getSession();
Transaction trans = session.beginTransaction();
try {
TcpnsthistoryDAO tdao = new TcpnsthistoryDAO();
Tcpnsthistory th = tdao.findById(Long.parseLong(serviceNo));
到这里 包空指针------》th.setIfTemp(Long.parseLong(ifTemp));
th.setIfLast(Long.parseLong(ifLast));
th.setBizFlag(Long.parseLong(bizFlag));
这里是什么意思 -----》 tdao.merge(th);
trans.commit();
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
trans.rollback();
return -1;
}

还要麻烦下大侠们merge()的用法,还有上面代码使用的意义,谢谢啦!
return 1;
}

------解决方案--------------------
我认为:ifTemp传过来的是null,就空指针,就不能在parseLong()了;
关于merge()的使用,要对Hibernate的对象的三种状态之间的相互关系理清楚,详见:http://huangtut.javaeye.com/blog/261520
------解决方案--------------------
merge是返回自由态的saveorupdate。在往深研究这个理解可能是错的。
--------------------------------------
Tcpnsthistory th= tdao.findById(Long.parseLong(serviceNo)); ;
if(th==null){
th=new Tcpnsthistory ();
}