小弟弟是新人,今天早上练习Spring-Hibernate整合 写DAO 时 this.getSession():报空指针异常 搞了4个小时了还是没搞定,各位大侠帮帮忙。这个是项目图
这个是User.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">
<hibernate-mapping>
<class name="com.hz.entity.User" table="cc_flagdata">
<id name="id" type="java.lang.Integer" column="cloid" ></id>
<property name="cloname" type="string" column="cloname"></property>
</class>
</hibernate-mapping>
这个是schema.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<bean id="dataSource" destroy-method="close"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="oracle.jdbc.driver.OracleDriver"></property>
<property name="url"
value="jdbc:oracle:thin:zt/zt@10.165.65.156:1521:orcl"></property>
<property name="username" value="zt"></property>
<property name="password" value="zt"></property>
<property name="maxActive" value="10"></property>
<property name="initialSize" value="2"></property>
<property name="minIdle" value="2"></property>
<property name="maxIdle" value="3"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="mappingResources">
<list>
<value>com/hz/entity/User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.OracleDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
<bean id="hibernateUserDao" class="com.hz.dao.HibernateUserDAO">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
</beans>
这个是DAO 的代码:
public class HibernateUserDAO extends HibernateDaoSupport {
public List getCloname() {
Session session = (Session) this.getSession();
System.out.println(session);
try {
Query query = (Query) session.createQuery("from user");
List list = query.list();
return list;
} catch (HibernateException e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
HibernateUserDAO dao = new HibernateUserDAO();
List<User> list = dao.getCloname();
for(User user:list){
System.out.println(user);
}
}
main方法测试就报如下异常:
Exception in thread "main" java.lang.NullPointerException
at org.springframework.orm.hibernate3.support.HibernateDaoSupport.getSession(HibernateDaoSupport.java:141)
at com.hz.dao.HibernateUserDAO.getCloname(HibernateUserDAO.java:16)
at com.hz.dao.HibernateUserDAO.main(HibernateUserDAO.java:32)
首先你这种写法,明显是web,所以,你要简单的测试,就要启动web,然后通过前台地址一直调用到后台来,才能不NullPointerException。
原因很简单:你这个main的测试是“单机版”,你直接这么写,web不启动,spring容器就不会启动,没有容器,就不会有bean,就不会去读取你的配置文件,没有配置文件,你说,你的HibernateUserDAO哪儿来的sessionFactory?没有sessionFactory,你this.getSession()凭什么不报错?
如果硬要测试DAO层而不用启动web也不是不可以,Junit就是很好的工具,但是明显你没有在junit里面测试,而是自己写main,你以为单机版啊?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。