首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

Hibernate查询空值针,该如何解决

2012-04-02 
Hibernate查询空值针数据库是MySQl的mysql use hibernatetestDatabase changedmysql select * from stud

Hibernate查询空值针
数据库是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.java

Java code
public interface IBaseHibernateDAO {    public Session getSession();}


BaseHibernateDAO.java
Java code
public class BaseHibernateDAO implements IBaseHibernateDAO {        public Session getSession() {        //FIXME: Implement this method        return null;    }    }


StudentDAO.java(代码没全贴,因为就用了findAll() )
Java code
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.java
Java code
public 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
Java code
<?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 code
<?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>


[解决办法]
public class BaseHibernateDAO implements IBaseHibernateDAO {

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

}
返回的都是null,肯定查询不了啦
[解决办法]
1楼说的是对的,
public Session getSession() {
private static SessionFactory sessionFactory;

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

这里或的session返去就没有错误了!

热点排行
Bad Request.