hibernate java.lang.NullPointerException
在做一个关于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
[解决办法]
- XML code
<!-- 配置 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>
[解决办法]
那个映射文件跟表没有对,特别是ORACLE的序列要注意一下!!有一点不一样!!
- XML code
<!-- 配置 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>