CommonDAOImpl中泛型使用

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类型对象实体没有映射文件关联

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值