当前位置:编程学习 > JAVA >>

spring+hibernate整合中HibernateTemplate对象的getHibernateTemplate()获取为空

这个问题困扰我一天了,始终找不到哪里有错,经我分析应该是HibernateTemplate ht = this.getHibernateTemplate();
中没有得到对象,但我配置xml都是按照郭克华老师给的源码写的,不知道哪里有错,请各位大侠给我看看
有错dao类:
package dao;
import org.apache.log4j.Logger;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import po.Users;

public class RegDao extends HibernateDaoSupport implements Iregdao {
private static Logger logger=Logger.getLogger("RegDao");

HibernateTemplate ht = this.getHibernateTemplate();

public boolean addUser(Users user) {
try {
ht.save(user);
return true;
} catch (DataAccessException e) {
e.printStackTrace();
}
return false;
}
public Users getUserByAccount(String account) {
Users user=null;
try {

user=(Users)ht.get(Users.class, account);//这里报错
                                                                        //java.lang.NullPointerException
} catch (DataAccessException e) {
e.printStackTrace();
}
return user;
}

}
出错信息:
ERROR - Servlet.service() for servlet action threw exception
java.lang.NullPointerException
at dao.RegDao.getUserByAccount(RegDao.java:34)
at action.UserRegistAction.execute(UserRegistAction.java:51)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:110)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)
各配置文件我都放在webroot/WEB-INF/目录下
spring配置文件 :applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<bean id="regDao" class="dao.RegDao" >
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property> 
</bean>
<bean name="/userRegist" class="action.UserRegistAction" singleton="false">
<property name="regdao">
<ref local="regDao"/>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation"
value="/WEB-INF/hibernate.cfg.xml">
</property>
</bean></beans>
hibernate配置文件: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="connection.username">sa</property>
<property name="connection.url">
jdbc:sqlserver://localhost:1433;databaseName=orderticket
</property>
<property name="dialect">
org.hibernate.dialect.SQLServerDialect
</property>
<property name="myeclipse.connection.profile">connect</property>
<property name="connection.password">000000</property>
<property name="connection.driver_class">
com.microsoft.sqlserver.jdbc.SQLServerDriver
</property>
<mapping resource="po/Users.hbm.xml" />
<mapping resource="po/Admin.hbm.xml" />
<mapping resource="po/Orderitems.hbm.xml" />
<mapping resource="po/Orders.hbm.xml" />
<mapping resource="po/Flights.hbm.xml" />

</session-factory>

</hibernate-configuration>
struts配置文件:struts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
  <data-sources />
  <form-beans >
    <form-bean name="userRegistForm" type="form.UserRegistForm" />

  </form-beans>

  <global-exceptions />
  <global-forwards />
  <action-mappings >
    <action
      attribute="userRegistForm"
      input="/userRegist.jsp"
      name="userRegistForm"
      path="/userRegist"
      scope="request"
      type="org.springframework.web.struts.DelegatingActionProxy" />

  </action-mappings>

  <message-resources parameter="ApplicationResources" />
  <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml" />
  </plug-in> 
</struts-config>

不明白到底是哪里有错,请大家帮帮忙看一下 --------------------编程问答-------------------- 我在struts配置文件中配置的spring插件 然后更换了action的 type="org.springframework.web.struts.DelegatingActionProxy" /> 
然后在spring配置文件中配置了sessionFactory,并注入到dao类中,dao类继承了HibernateDaoSupport 类以便使用其sessionFactory属性,然后定义HibernateTemplate模版进行数据库查询
可是没有得到要的ht --------------------编程问答-------------------- 请各位大侠教我 --------------------编程问答-------------------- 鄙人愚见
是不是架包的错误,ssh有时候不同的版本jar 文件可能会出现问题 --------------------编程问答-------------------- 我更换成一本参考书上jar包,可是问题照旧。  --------------------编程问答-------------------- --------------------编程问答-------------------- public Users getUserByAccount(String account) { 
Users user=null; 
try { 

user=(Users)ht.get(Users.class, account);//这里报错 
                                                                        //java.lang.NullPointerException 

空指针异常  你把user对象 打印一下 看得到这个对象 这个对象有值没
我觉得 没得到这个user对象
--------------------编程问答-------------------- 我单步调试了一下,发现到这里时
user=(Users)ht.get(Users.class, account);//这里报错 
ht为null然后报错
ERROR - Servlet.service() for servlet action threw exception
java.lang.NullPointerException --------------------编程问答-------------------- dao类是否只要继承HibernateDaoSupport 然后在配置文件中配置sessionFactory和数据源后就可以自动注入HibernateTemplate 中啊,为什么我HibernateTemplate ht = this.getHibernateTemplate(); 后ht为空呢? --------------------编程问答-------------------- 最后终于弄出来了try {
HibernateTemplate ht = this.getHibernateTemplate();
user=(Users)ht.get(Users.class, account);
                                                                        //java.lang.NullPointerException
} catch (DataAccessException e) {
e.printStackTrace();
} 这样写就不报错误了 --------------------编程问答-------------------- spring配置文件改成这样就行了 :
applicationContext.xml 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> 
<beans> 
<bean id="sessionFactory" 
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
<property name="configLocation" 
value="/WEB-INF/hibernate.cfg.xml"> 
</property> 
</bean>
<bean id="regDao" class="dao.RegDao" > 
<property name="sessionFactory"> 
<ref local="sessionFactory"/> 
</property> 
</bean> 
<bean name="/userRegist" class="action.UserRegistAction" singleton="false"> 
<property name="regdao"> 
<ref local="regDao"/> 
</property> 
</bean> 

</beans> --------------------编程问答-------------------- java技术群:69705156
欢迎加入 --------------------编程问答-------------------- 一般getHibernateTemplate()为空的情况有哪些 我的配置文件让别人看了没有问题呀 可就是没有获得session对象 --------------------编程问答-------------------- 楼主啊,我一开始整合SSH2时唯一遇到的问题就是你这个问题,我也是先
HibernateTemplate template=getHibernateTemplate();
绝对不行的,只能在使用时用getHibernateTemplate()来获得getHibernateTemplate,
然后就没问题了
--------------------编程问答-------------------- 配置文件中:
<bean id="hibernateTemplate" class="">  
<property name="sessionFactory" ref="sessionFactory"> </property>  
</bean>  

<bean id="baseDao" class="com.gdekt.dao.daoimpl.BaseDaoImpl">  
<property name="sessionFactory" ref="sessionFactory"> </property>  
<property name="hibernateTemplate" ref="hibernateTemplate"> </property>  
</bean> 
把这个也注入进来,这样System.out的时候就会显示取到了hibernateTemplate了!  --------------------编程问答-------------------- 看样子 好像是因为 hibernateTemplate 设成全局之后失效了,应该现取现用
补充:Java ,  Java EE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,