开发者社区> 问答> 正文

整合Spring Hibernate时 this.getSession() 报空指针异常

小弟弟是新人,今天早上练习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)

展开
收起
a123456678 2016-03-16 09:40:48 3247 0
1 条回答
写回答
取消 提交回答
  • 首先你这种写法,明显是web,所以,你要简单的测试,就要启动web,然后通过前台地址一直调用到后台来,才能不NullPointerException。

    原因很简单:你这个main的测试是“单机版”,你直接这么写,web不启动,spring容器就不会启动,没有容器,就不会有bean,就不会去读取你的配置文件,没有配置文件,你说,你的HibernateUserDAO哪儿来的sessionFactory?没有sessionFactory,你this.getSession()凭什么不报错?

    如果硬要测试DAO层而不用启动web也不是不可以,Junit就是很好的工具,但是明显你没有在junit里面测试,而是自己写main,你以为单机版啊?

    2019-07-17 19:03:23
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载

相关实验场景

更多