spring+hibernate 调用 DAO 出现java.lang.NullPointerException异常,先谢谢了
applicationcontex.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 name="/login" class="com.test.struts.action.LoginAction" singleton="false"></bean>
<bean id="DataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/SAMPLEDB</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>123</value>
</property>
</bean>
<bean id="SessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="DataSource"></ref>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/test/Hibernate/User.hbm.xml</value>
</list>
</property>
</bean>
<bean id="UserDAO" class="com.test.Hibernate.UserDAO">
<property name="sessionFactory">
<ref bean="SessionFactory" />
</property>
</bean>
</beans>
DAO.java如下:
package com.test.Hibernate;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.LockMode;
import org.hibernate.Session;
import org.hibernate.criterion.Example;
import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
/**
* Data access object (DAO) for domain model class User.
* @see com.test.Hibernate.User
* @author MyEclipse - Hibernate Tools
*/
public class UserDAO extends HibernateDaoSupport {
private static final Log log = LogFactory.getLog(UserDAO.class);
protected void initDao() {
//do nothing
}
private static String hql = "from User u where u.username=? ";
public boolean isValidUser(String username, String password) {
List userList = this.getHibernateTemplate().find(hql, username);
if (userList.size() > 0) {
return true;
}
return false;
}
private Session openSession() {
// TODO Auto-generated method stub
return null;
}
}
调用如下:
private UserDAO userDAO;
public UserDAO getUserDAO() {
return userDAO;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
{
DynaActionForm loginForm = (DynaActionForm) form;
String username=loginForm.getString("username");
String password=loginForm.getString("password");
if (userDAO.isValidUser(username,password)) {
return mapping.findForward("indexGo");
} else {
return mapping.getInputForward();
}
}
问题点数:100、回复次数:4Top
1 楼dingyanding(丁)回复于 2006-04-29 15:46:16 得分 0
是在: if (userDAO.isValidUser(username,password)) 出错!Top
2 楼IceCraft(心淡情浓)回复于 2006-04-29 15:52:19 得分 10
你的架构似乎有问题,显示层直接调用持久层了,中间的服务层呢。
显示层--》服务层--》持久层
需要在spring中为服务层的服务对象配置事务代理工厂,同时配置事物规则等等,然后才能调用。Top
3 楼Saro(这也不是江水,这是二十年流不尽的英雄血。)回复于 2006-04-29 16:19:06 得分 90
你的loginAction没有注入UserDao这个Bean。
<bean name="/login" class="com.test.struts.action.LoginAction" singleton="false">
<property name="userDAO"><ref bean="UserDAO" /></property>
</bean>
另外,singleton="false"从LoginAction的代码看来,我认为是没有必要的,Spring管理prototype的bean效率并不是很高。Top
4 楼dingyanding(丁)回复于 2006-04-29 16:28:38 得分 0
感谢saro:
现在有出现了这个问题:
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Hibernate operation: could not execute query; bad SQL grammar [select user0_.ID as ID, user0_.USERNAME as USERNAME0_, user0_.PASSWORD as PASSWORD0_ from sampledb__user user0_ where user0_.USERNAME=?]; nested exception is java.sql.SQLException: Table 'sampledb.sampledb__user' doesn't exist
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause
org.springframework.jdbc.BadSqlGrammarException: Hibernate operation: could not execute query; bad SQL grammar [select user0_.ID as ID, user0_.USERNAME as USERNAME0_, user0_.PASSWORD as PASSWORD0_ from sampledb__user user0_ where user0_.USERNAME=?]; nested exception is java.sql.SQLException: Table 'sampledb.sampledb__user' doesn't exist
org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.translate(SQLErrorCodeSQLExceptionTranslator.java:223)
org.springframework.orm.hibernate3.HibernateAccessor.convertJdbcAccessException(HibernateAccessor.java:424)
org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:411)
org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:370)
org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:817)
org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:813)
com.test.Hibernate.UserDAO.isValidUser(UserDAO.java:119)
com.test.struts.action.LoginAction.execute(LoginAction.java:58)
org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
Top




