高分急救,一个异常问题,HIBERNATE和SPRING结合,泛型DAO的问题

dengjie532054105 2009-01-28 02:02:29
我自己写了一个泛型DAO,用的是SPRING的HibernateDaoSupport来获得hibernateTemplate。
异常如下:
严重: Servlet.service() for servlet fms threw exception
java.lang.NullPointerException
at core.service.impl.GenericManagerImpl.getAll(GenericManagerImpl.java:58)
at fms.web.CommonController.commonHandler(CommonController.java:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:421)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:136)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:326)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:313)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)


我第一次写泛型DAO接口和实现类如下:如果大哥们现成的泛型DAO提供给我参考最好,能加我QQ吧532054105.十分感谢了!!!
/**
*
*/
package core.dao;

import java.io.Serializable;
import java.util.List;

/**
* 公用的核心DAO接口,提供常用CRUD操作
* @author dengjie
*
*/
public interface GenericDao<T, ID extends Serializable> {

/**
* 根据ID值进行查询
* @param id 记录ID值
*/
public T get(ID id);
/**
* 查询全部记录
*/
public List<T> getAll();
/**
* 保存实体类
* @param entity 实体类
*/
public void save(T entity);
/**
* 更新实例类
* @param entity
*/
public void update(T entity);
/**
* 删除操作,删除一个实体类
* @param entity 要删除的实体类
*/
public void delete(T entity);
/**
* 根据字段值条件进行查询
* @param property 字段名称
* @param value 字段条件值
*/
public List<T> findByProperty(String property,Object value);
}


实现类:
/**
*
*/
package core.dao.impl;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;

import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import core.dao.GenericDao;

/**
* 公用基本DAO的实现类
* @author dengjie
*
*/
public class GenericDaoImpl<T,ID extends Serializable> extends HibernateDaoSupport implements GenericDao<T,ID> {
/**
* 调用反射方法得到不同的实体类
* @return
*/
@SuppressWarnings("unchecked")
private Class<T> type(){
return (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}

/**
* 删除操作,删除一个实体类
* @param entity 要删除的实体类
*/
public void delete(T entity) {
this.getHibernateTemplate().delete(entity);
}

/**
* 根据字段值条件进行查询
* @param property 字段名称
* @param value 字段条件值
*/
@SuppressWarnings("unchecked")
public List findByProperty(String property, Object value) {
return this.getHibernateTemplate().findByCriteria(
DetachedCriteria.forClass(type()).add(Restrictions.eq(property, value)));
}
/**
* 根据ID值进行查询
* @param id 记录ID值
*/
@SuppressWarnings("unchecked")
public Object get(Serializable id) {
return this.getHibernateTemplate().get(type(), id);
}
/**
* 查询全部记录
*/
@SuppressWarnings("unchecked")
public List getAll() {
return this.getHibernateTemplate().loadAll(type());
}
/**
* 保存实体类
* @param entity 实体类
*/
public void save(T entity) {
this.getHibernateTemplate().save(entity);
}
/**
* 更新实例类
* @param entity
*/
public void update(T entity) {
this.getHibernateTemplate().update(entity);
}
}

service层的接口:
/**
*
*/
package core.service;

import java.io.Serializable;
import java.util.List;

/**
* service层的核心manger接口
* @author dengjie
*
*/
public interface GenericManager<T,ID extends Serializable> {
/**
* 根据ID值进行查询
* @param id 记录ID值
*/
public T get(ID id);
/**
* 查询全部记录
*/
public List<T> getAll();
/**
* 保存实体类
* @param entity 实体类
*/
public void save(T entity);
/**
* 更新实例类
* @param entity
*/
public void update(T entity);
/**
* 删除操作,删除一个实体类
* @param entity 要删除的实体类
*/
public void delete(T entity);
/**
* 根据字段值条件进行查询
* @param property 字段名称
* @param value 字段条件值
*/
public List<T> findByProperty(String property,Object value);
}

实现类:
/**
*
*/
package core.service.impl;

import java.io.Serializable;
import java.util.List;

import core.dao.GenericDao;
import core.service.GenericManager;

/**
* service层的公用服务类,提供基本DAO的CRUD操作
* @author dengjie
*
*/
@SuppressWarnings("unchecked")
public class GenericManagerImpl<T,ID extends Serializable> implements GenericManager<T,ID> {
private GenericDao genericDao;

public GenericDao getGenericDao() {
return genericDao;
}

public void setGenericDao(GenericDao genericDao) {
this.genericDao = genericDao;
}
public void delete(Object entity) {
genericDao.delete(entity);

}
public List findByProperty(String property, Object value) {
return genericDao.findByProperty(property, value);
}
public Object get(Serializable id) {
return genericDao.get(id);
}
public List getAll() {
return genericDao.getAll();
}
public void save(Object entity) {
genericDao.save(entity);
}
public void update(Object entity) {
genericDao.update(entity);
}
}
如果那个大哥能提供现成的泛型DAO给我参考下最好。谢谢了。十分感谢了。希望DAO接口和实现都有。要采用SPRING的支持。
...全文
179 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
fosjos 2009-01-29
  • 打赏
  • 举报
回复
service是否注入了dao ?

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧