CommonDAOImpl中泛型使用

来源:互联网 发布:caffe官网教程 编辑:程序博客网 时间:2024/05/17 02:31

CommonDAOImpl是所有DAOImpl的父类,里面包含了所有DAO类会使用到的公共方法,比如说update(),save(),find()等方法
在查找操作时候,有这样的find()方法
public T findObjecByID(Serializable id) {
//下面的entity是相应实体类
return (T)this.getHibernateTemplate().get(entity.class, id);
}
但是这样的方法不能放在CommonDAOImpl中而只能放在相应的DAO中,因为entity.class已经写死,所以需要使用到泛型,来扩展find()方法的使用范围,更好的方法如下

public T findObjecByID(Serializable id) {
//泛型转换
ParameterizedType pt=(ParameterizedType) this.getClass().getGenericSuperclass();
Class entity=(Class) pt.getActualTypeArguments()[0];
return (T)this.getHibernateTemplate().get(entity, id);
}

我也曾想过,可不可以这样写
public T findObjecByID(Serializable id) {
//下面的entity是相应实体类
return (T)this.getHibernateTemplate().get(Object.class, id);
}
将entity.class换成Object.class
实际上这种方法是不可行的,junit测试会抛出异常
org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: java.lang.Object; nested exception is org.hibernate.MappingException: Unknown entity: java.lang.Object
因为Object类型对象实体没有映射文件关联

0 0
原创粉丝点击