public List search(final PetInfo condition, final String orderBy) {



return super.getHibernateTemplate().executeFind(
new HibernateCallback() { public Object doInHibernate(Session s)
throws HibernateException, SQLException { Criteria c = s.createCriteria(PetInfo.class);
if (condition != null) {
if (condition.getPetOwnerName() != null
&& !"".equals(condition.getPetOwnerName()
.trim())) {
c.add(Restrictions.like("petOwnerName",
condition.getPetOwnerName(),
MatchMode.ANYWHERE));
}
if (condition.getPetType() != null
&& Integer.parseInt(condition.getPetType()
.toString()) > 0) {
c.add(Restrictions.eq("petType", condition
.getPetType()));
}
}
String order = orderBy;
order = (null == orderBy || orderBy.trim().equals("")) ? "petName"
: orderBy;
c.addOrder(Order.asc(order));
List ret = c.list();
return ret;
} });
}
java.lang.NullPointerException
at com.aptech.jb.epet.dao.hibimpl.PetInfoDaoHibImpl.search(PetInfoDaoHibImpl.java:84)
at com.aptech.jb.epet.struts.action.PetAction.doList(PetAction.java:299)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at com.aptech.jb.epet.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:30)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:619)
用hibernateCallBack的时候报空指针异常
return super.getHibernateTemplate().executeFind(
new HibernateCallback() {
这句报错

解决方案 »

  1.   

    HibernateCallback()是一个回调方法,在hibernate框架下,对数据库的一种操作,其实它使用很简单的,用这个方法是为了方便,为了创建session,须要在回调方法里比如:
    public List selectList(final int startPage, final int endPage) {
      List list = new ArrayList();
      final String hql = "from Item order by id desc";
      list = this.getHibernateTemplate().executeFind(new HibernateCallback() {   public Object doInHibernate(Session session)
         throws HibernateException, SQLException {
        Query query = session.createQuery(hql);//创建SESSION
        query.setFirstResult(startPage);//分页设置
        query.setMaxResults(endPage);
        List list = query.list();获取结果结晶
        return list;//返回值
       }  });
      return list;
     } 
      

  2.   

    getHibernateTemplate()  需要注入sessionFactory,你没有注入进来
      

  3.   

    现在问题来了。。我在同一个类的其它方法里面getHibernateTemplate()都有值
    唯独在执行我上面所说的方法的时候getHibernateTemplate()为空
      

  4.   

    debug进去,找到具体哪一行就可以了啊
      

  5.   


    我不太明白你什么意思
    我把我的代码贴一下吧
    package com.aptech.jb.epet.dao.hibimpl;import java.sql.SQLException;
    import java.util.List;
    import org.hibernate.Criteria;
    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.criterion.MatchMode;
    import org.hibernate.criterion.Order;
    import org.hibernate.criterion.Restrictions;
    import com.aptech.jb.epet.dao.PetInfoDao;
    import com.aptech.jb.epet.entity.PetInfo;
    import org.springframework.orm.hibernate3.HibernateCallback;
    import org.springframework.orm.hibernate3.HibernateTemplate;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;public class PetInfoDaoHibImpl extends HibernateDaoSupport implements
    PetInfoDao {
    //
    // private PetInfoDao petInfoDao = null;
    //
    // public void setPetInfoDao(PetInfoDao petInfoDao) {
    // this.petInfoDao = petInfoDao;
    // } public void doTraining(Integer petId, String Training) {
    PetInfo petInfo = this.get(petId);
    if (Training.equals("doFeed")) {
    petInfo.setPetStrength(new Integer(Integer.parseInt(petInfo
    .getPetStrength().toString()) + 30));
    } else if (Training.equals("doStroy")) {
    petInfo.setPetCute(new Integer(Integer.parseInt(petInfo
    .getPetCute().toString()) + 1));
    petInfo.setPetLove(new Integer(Integer.parseInt(petInfo
    .getPetLove().toString()) + 3));
    petInfo.setPetStrength(new Integer(Integer.parseInt(petInfo
    .getPetStrength().toString()) - 5));
    } else if (Training.equals("doGame")) {
    petInfo.setPetCute(new Integer(Integer.parseInt(petInfo
    .getPetCute().toString()) + 3));
    petInfo.setPetLove(new Integer(Integer.parseInt(petInfo
    .getPetLove().toString()) + 1));
    petInfo.setPetStrength(new Integer(Integer.parseInt(petInfo
    .getPetStrength().toString()) - 5));
    }
    super.getHibernateTemplate().update(petInfo);
    } /**
     * 增加宠物信息
     */
    public void insertPetInfo(PetInfo petInfo) {
    super.getHibernateTemplate().save(petInfo);
    } /**
     * 查询一条宠物信息
     */
    public PetInfo get(Integer id) {
    // return (PetInfo) super.get(PetInfo.class, id);
    return (PetInfo) super.getHibernateTemplate().get(PetInfo.class, id);
    } public List selectAll() {
    return null;
    } /**
     * 更新一条宠物信息
     */
    public void update(PetInfo petInfo) {
    super.getHibernateTemplate().update(petInfo); } public PetInfo userValidate(String petId, String petPassword) {
    // TODO 自动生成方法存根
    return null;
    } public List search(final PetInfo condition, final String orderBy) { HibernateTemplate ht = super.getHibernateTemplate();
    return super.getHibernateTemplate().executeFind(
    new HibernateCallback() { public Object doInHibernate(Session s)
    throws HibernateException, SQLException { Criteria c = s.createCriteria(PetInfo.class);
    if (condition != null) {
    if (condition.getPetOwnerName() != null
    && !"".equals(condition.getPetOwnerName()
    .trim())) {
    c.add(Restrictions.like("petOwnerName",
    condition.getPetOwnerName(),
    MatchMode.ANYWHERE));
    }
    if (condition.getPetType() != null
    && Integer.parseInt(condition.getPetType()
    .toString()) > 0) {
    c.add(Restrictions.eq("petType", condition
    .getPetType()));
    }
    }
    String order = orderBy;
    order = (null == orderBy || orderBy.trim().equals("")) ? "petName"
    : orderBy;
    c.addOrder(Order.asc(order));
    List ret = c.list();
    return ret;
    } });
    }
    }执行其它的方法没有任何问题 唯独在执行最后一个search方法的时候。super.getHibernateTemplate()为空。另外问一下 是不是要配合事务来执行?
      

  6.   

    是运行在web服务器时报错?还是你测试哪个方法时候报错?
        session 是否为空??我刚解决了,就是session的问题