public void saveStudent(Student student){
try {
transaction = (org.hibernate.Transaction)session.beginTransaction();
session.save(student);
transaction.commit();
} catch (Exception e) {
transaction.rollback();
}finally{
session.close();
}

}保存方法如下,求指教,问题不知道出哪了。。

解决方案 »

  1.   

    session.save(student);
    是这里报的吗?确保session不为空。
      

  2.   

    断点DEBUG看是报的哪个为空。
      

  3.   


    突然发现数据库已经存进去了。。但是还是报指针。。我确信转发没错错误信息如下:java.lang.NullPointerException
    org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:431)
    org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:366)
    org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:105)
    org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1561)
    org.hibernate.loader.Loader.doQuery(Loader.java:661)
    org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:223)
    org.hibernate.loader.Loader.doList(Loader.java:2147)
    org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2026)
    org.hibernate.loader.Loader.list(Loader.java:2021)
    org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:369)
    org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:298)
    org.hibernate.impl.SessionImpl.list(SessionImpl.java:1020)
    org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
    com.sinosoft.book.dao.StudentDaoImpl.getStudents(StudentDaoImpl.java:21)
    com.sinosoft.book.service.StudentServiceIMPL.getStudents(StudentServiceIMPL.java:12)
    com.sinosoft.book.web.studentAction.doPost(studentAction.java:56)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
      

  4.   

    com.sinosoft.book.dao.StudentDaoImpl.getStudents(StudentDaoImpl.java:21)
    这不是你上面保存的方法报的错啊。貌似是查询的时候报的。
      

  5.   

    com.sinosoft.book.dao.StudentDaoImpl.getStudents(StudentDaoImpl.java:21)
    com.sinosoft.book.service.StudentServiceIMPL.getStudents(StudentServiceIMPL.java:12)你再检查一下吧。
      

  6.   

    看看啥东东调用了getStudents这个方法..是那个为空
      

  7.   


    //登录
    if("login".equals(method)){
    List<Student> list = studentService.getStudents();
    request.setAttribute("list", list);
    request.getRequestDispatcher("/jsp/studentList.jsp").forward(request, response);
    }
    //添加学生
    else if("add".equals(method)){
    request.setCharacterEncoding("UTF-8");
    String stuXh = Parameter.getStringParameter(request, "stuXh", "");
    String stuXm = Parameter.getStringParameter(request, "stuXm", "");
    String stuXb = Parameter.getStringParameter(request, "stuXb", "");
    String stuNl = Parameter.getStringParameter(request, "stuNl", "");
    String stuSch = Parameter.getStringParameter(request, "stuSch", "");
    student.setStuXh(stuXh);
    student.setStuXb(stuXb);
    student.setStuXm(stuXm);
    student.setStuNl(stuNl);
    student.setStuSch(stuSch);
    studentService.saveStudent(student);
    List<Student> list = studentService.getStudents();
    request.setAttribute("list", list);
    request.getRequestDispatcher(request.getContextPath()+"/jsp/studentList.jsp").forward(request, response);
    }直接登录调用第一个方法是有数据的,第二个方法在掉用getStudents就为空了。。不解
      

  8.   


    public List<Student> getStudents(){
    String hql = " from Student";
    List<Student> list=null;
    try {
    list = session.createQuery(hql).list();
    session.flush();
    } catch (Exception e) {
    }finally{
    session.close();
    }

    return list;
    }去数据方法如下
      

  9.   


    Configuration configuration = new Configuration().configure();
    SessionFactory sessionFactory = configuration.buildSessionFactory();
    Session session = sessionFactory.openSession();
    org.hibernate.Transaction transaction = null;
    @SuppressWarnings("unchecked")
    public List<Student> getStudents(){
    Configuration configuration = new Configuration().configure();
    SessionFactory sessionFactory = configuration.buildSessionFactory();
    Session session = sessionFactory.openSession();
    String hql = " from Student";
    List<Student> list=null;
    try {
    list = session.createQuery(hql).list();
    session.flush();
    } catch (Exception e) {
    }finally{
    session.close();
    }

    return list;
    }
    问题解决。。我把方法外面定义的变量拿进来。就有用了
    但是我不知道为什么
      

  10.   


    我想可能是你在finally将其关闭的缘故。在方法里边的session是每次调用都会重新创建一个,因此不会报错吧。