数据库是MySQl的
mysql> use hibernatetest
Database changed
mysql> select * from student
    -> ;
+-----------+------+----------+
| idStudent | name | number   |
+-----------+------+----------+
|         1 | zjj  | 20000101 |
|         2 | zhou | 20000102 |
+-----------+------+----------+
2 rows in set (0.03 sec)
Hibernate运行查询的时候有空指针异常,不知道是哪里的错误导致查询失败,错误贴上
log4j:WARN No appenders could be found for logger (com.zhoujiajun.pojo.StudentDAO).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" java.lang.NullPointerException
at com.zhoujiajun.pojo.StudentDAO.findAll(StudentDAO.java:110)【1】
at com.zhoujiajun.test.test.main(test.java:15)【2】数据库是有连接成功,也有数据,但是查询没结果,查询会有空指针异常,不知道是哪里出问题了,希望大家有空帮我看看。。
我是Hibernate刚开始学,什么都不懂
代码用MyEclipse的DB Browser,对数据表右键,Hibernate Rever Engineering生成的代码,具体的贴上来
Student.java:
数据表的各元素的get和set
这个应该没有问题IBaseHibernateDAO.javapublic interface IBaseHibernateDAO {
public Session getSession();
}
BaseHibernateDAO.javapublic class BaseHibernateDAO implements IBaseHibernateDAO {

public Session getSession() {
//FIXME: Implement this method
return null;
}

}
StudentDAO.java(代码没全贴,因为就用了findAll() )public class StudentDAO extends BaseHibernateDAO  {
        private static final Logger log = LoggerFactory.getLogger(StudentDAO.class);
public static final String NAME = "name";
public static final String NUMBER = "number";
     public List findAll() {
log.debug("finding all Student instances");
try {
String queryString = "from Student";
         Query queryObject = getSession().createQuery(queryString);//【1】处出错
 return queryObject.list();
} catch (RuntimeException re) {
log.error("find all failed", re);
throw re;
}
}
}
test.javapublic class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
StudentDAO dao = new StudentDAO();
List<Student> result = dao.findAll();//【2】处出错
for(Student o : result) {
System.out.println("编号:" + o.getIdStudent());
System.out.println("姓名:" + o.getName());
System.out.println("学号:" + o.getNumber());
}
dao.getSession().close();
}}
然后还有配置hibernate.cfg.xml<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration> <session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/HibernateTest
</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="myeclipse.connection.profile">MySQL55</property>
<mapping resource="com/zhoujiajun/pojo/Student.hbm.xml" /> </session-factory></hibernate-configuration>
映射Student.hbm.xml<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.zhoujiajun.pojo.Student" table="student" catalog="hibernatetest">
        <id name="idStudent" type="java.lang.Integer">
            <column name="idStudent" />
            <generator class="assigned" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="45" />
        </property>
        <property name="number" type="java.lang.String">
            <column name="number" length="45" />
        </property>
    </class>
</hibernate-mapping>

解决方案 »

  1.   

    public class BaseHibernateDAO implements IBaseHibernateDAO {
        
        public Session getSession() {
            //FIXME: Implement this method
            return null;
        }
        
    }
    返回的都是null,肯定查询不了啦
      

  2.   

    1楼说的是对的,
    public Session getSession() {
    private static SessionFactory sessionFactory;  //FIXME: Implement this method
      return sessionFactory.getCurrentSession();
      }
    剩下的你自己再看看吧
      

  3.   

    方法少了语句了,不好意思public Session getSession() {
    //FIXME: Implement this method
      return sessionFactory.getCurrentSession();
      }
      

  4.   

    public class BaseHibernateDAO implements IBaseHibernateDAO {
        
       private StudentDAO dao;   public List<Student> findAll(){
           return dao.findAll();
       }    
    }楼主啥都不写,,接口根本就没连接上...
    这样你在页面中使用当然是不行的...
    本人只是大概写了下..具体要靠楼主根据情况来改...
      

  5.   

    public class BaseHibernateDAO implements IBaseHibernateDAO {
        
       private StudentDAO dao;   public List<Student> findAll(){
           return dao.findAll();
       }    
    }楼主啥都不写,,接口根本就没连接上...
    这样你在页面中使用当然是不行的...
    本人只是大概写了下..具体要靠楼主根据情况来改...
      

  6.   

    首先第一点  public Session getSession() {
            //FIXME: Implement this method
            return null;
        }这个方法,你需要返回一个Session,而不是null,估计你是直接快捷键出来的吧,这就跟没写有啥区别?
    还有就是  private StudentDAO dao;你是打算要用Spring?那你至少也得有个Set方法吧,这只是大体思路,你可以自己百度,Google,慢慢来,把流程理清楚了数据自然就出来了,还有最重要的一点,我上学的时候经常遇到,丫的数据库添加了数据有木有Commit,嘿嘿,如果没有提交你就蛋疼咯。这只是针对Oracle跟Sqlserver来说的。
      

  7.   


    public class BaseHibernateDAO implements IBaseHibernateDAO {
        
      public Session getSession() {
      //FIXME: Implement this method
      return null;
      }
        
    }
    //你要获得的是session,但是结果得到了null 当然报错了
      

  8.   

    t com.zhoujiajun.pojo.StudentDAO.findAll(StudentDAO.java:110)【1】
    这么清楚的报错提示,自己好好找找就可以了
      

  9.   

    不能直接返回null呀!
      public Session getSession() {
      //FIXME: Implement this method
      return null;
      }这里或的session返去就没有错误了!