日期:2014-05-17  浏览次数:20722 次

s2sh使用泛型后不能在dao里获取到泛型的类型

s2sh使用泛型后不能在dao里获取到泛型的类型

最近看了月之神的帖子 http://blog.csdn.net/zylyueliang/article/details/5890043
做了实验以后再原来的xml配置下可以获取到泛型的类型type
public class GenericDaoImpl<T, ID extends Serializable> implements
GenericDao<T, ID> {
// 具体的实体类型
private Class<T> type;
// Spring提供的Hibernate工具类
private HibernateTemplate hibernateTemplate;
// 查询条件
private String hql;
public GenericDaoImpl(Class<T> type) {
this.type = type;
this.hql = "from " + type.getName();
}
public GenericDaoImpl() {
}
@Resource
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
@SuppressWarnings("unchecked")
public List<T> findAll() {
String hql = "from " + type.getName();
return (List<T>) hibernateTemplate.find(hql);
}

查看type的类型是实体类。
class test.s2sh.bean.Person

这样就可以获取到泛型的类型了。

但是我用注解的配置来做save操作时正常的。但是在调用findAll方法的时候这个type参数时空的。不知道怎么在spring的注解下获取dao泛型的类型。请各位指教。。
dao spring class hibernate string

------解决方案--------------------
type=(Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments[0];
其它类继承此类实际的泛型类型给它就行了