在做一个关于struts2+spring+hibernate3.x项目搭建环境测试过程中,写一个主函数测试hibernate的查询和存储,出现
java.lang.NullPointerException  ,上网找了好多信息,也没有解决问题,贴出来,哪个好心人帮助看一下!public class UsersDAOImpl extends BaseDAOImpl implements IUsersDAO {   public Users findUserByNameAndPass(String name, String pass) {
System.out.println("程序执行到此...UserDAOImpl...findUserByName"+name+"..."+pass); //String sql = "from Users s where s.username=? and s.userpassword=?";
List ul = getHibernateTemplate().find("from Users s where                             s.username="+name+"s.userpassword="+pass,new String[]{name,pass}); if(ul!=null && ul.size()>=1){
  return (Users)ul.get(0);
}
  return null;
    }
}
========================================================================测试的主函数:
public static void main(String[] args) {
// TODO Auto-generated method stub
//
// UserServiceImpl usi = new UserServiceImpl();
// try {
// usi.loginValid("admin", "123");
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
UsersDAOImpl udi = new UsersDAOImpl();
// //udi.findUserByNameAndPass("admin","123");
// //udi.getAllUser();
//
Users user = new Users();
user.setUsername("gaochc");
udi.saveObj(user);
}
========================================================================
报出的错误异常:Exception in thread "main" java.lang.NullPointerException
at net.gcc.pms.dao.impl.BaseDAOImpl.saveObj(BaseDAOImpl.java:27)
at net.gcc.pms.test.TestClass.main(TestClass.java:28)
========================================================================
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">   <!-- 设置数据源对象 -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
destroy-method="close">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@127.0.0.1:1521:oral</value>
</property>
<property name="username">
<value>gaochc</value>
</property>
<property name="password">
<value>19820415</value>
</property>

</bean>
   <!-- 配置sessionFactory,注意这里引入的是hibernate3而不是hibernate -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="mappingResources">
<list>
<value>net/gcc/pms/vo/Users.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
                    org.hibernate.dialect.Oracle9Dialect
                </prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
</props>
</property>
</bean>
   <!-- 配置事务管理器-->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
   <!-- 配置事务拦截器Bean -->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 事务拦截器bean 需要依赖注入一个事务管理器 -->
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
   <!-- 下面定义事务传播性 -->
   <props>
     <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
     <prop key="*">PROPAGATION_REQUIRED</prop>
   </props>
</property>
</bean>
<!-- 定义BeanNamfeAutoProxyCreator 后处理器 -->
 <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <!--  指定对满足哪些bean name的bean自动生成业务代理 -->
    <property name="beanNames">
            <!--  下面是所有需要自动创建事务代理的bean-->
            <list>
                <value>usi</value>
            </list>
            <!--  此处可增加其他需要自动创建事务代理的bean-->
    </property>
        <!--  下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
        <property name="interceptorNames">
            <list>
                <!-- 此处可增加其他新的Interceptor -->
                <value>transactionInterceptor</value> 
            </list>
        </property>
    </bean>
   <!-- 配置 DAO 类 -->
   <bean id="usi" class="net.gcc.pms.service.impl.UserServiceImpl">
      <property name="userDAO" ref="userDAO"></property>
   </bean>
  <bean id="userDAO" class="net.gcc.pms.dao.impl.UsersDAOImpl">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
   <!-- 配置 CompanyServiceImpl,将companyDAO 的值注入comDAO变量 -->
   <!-- 
<bean id="companyServiceImpl" class="net.gcc.pms.service.impl.CompanyServiceImpl">
<property name="comDAO">
<ref local="companyDAO" />
</property>
</bean>
 -->
</beans>spring 管理的配置文件 bean.xml 

解决方案 »

  1.   

    BaseDAOImpl.JAVA 的代码呢  肯定这里有问题!!
      

  2.   


    <!-- 配置 DAO 类 --> 
      <bean id="usi" class="net.gcc.pms.service.impl.UserServiceImpl"> 
          <property name="userDAO" ref="userDAO"> </property> 
      </bean> 
      <bean id="userDAO" class="net.gcc.pms.dao.impl.UsersDAOImpl"> 
    <property name="sessionFactory"> 
    <ref local="sessionFactory" /> 
    </property> 
    </bean> main()中的dao要是你自己NEW()出来的就不受spring的管理了,没有注入依赖关系,所以空指针
      

  3.   

    那个映射文件跟表没有对,特别是ORACLE的序列要注意一下!!有一点不一样!!
    <!-- 配置 DAO 类 --> 
      <bean id="usi" class="net.gcc.pms.service.impl.UserServiceImpl"> 
          <property name="userDAO" ref="userDAO"> </property> 
      </bean> 
      <bean id="userDAO" class="net.gcc.pms.dao.impl.UsersDAOImpl"> 
    <property name="sessionFactory"> 
    <!--
    <ref local="sessionFactory" /> 
    -->
    <ref bean="sessionFactory"/>
    </property> 
    </bean>