当前位置: 代码迷 >> J2EE >> spring 整合 hibernate 使用泛型的错误
  详细解决方案

spring 整合 hibernate 使用泛型的错误

热度:567   发布时间:2016-04-21 22:01:21.0
spring 整合 hibernate 使用泛型的异常
本帖最后由 xiaogutou1 于 2013-10-20 16:52:47 编辑
BasicDao 代码:
package com.util;

import org.springframework.orm.hibernate3.HibernateTemplate;

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

public class BasicDao<T> {

private HibernateTemplate hibernateTemplate;
private Class entityClass;

public BasicDao(){
Type genType = getClass().getGenericSuperclass();
Type[] params=((ParameterizedType)genType).getActualTypeArguments();
entityClass = (Class)params[0];
}


public void setHibernateTemplate(HibernateTemplate h){
this.hibernateTemplate=h;

}

//添加
public void insert(T entity){
hibernateTemplate.save(entity);
}
//修改
public void update(T entity){
hibernateTemplate.update(entity);
}
//删除
public void delete(T entity){
hibernateTemplate.delete(entity);
}

//查询
public T get(Serializable id){
return (T)hibernateTemplate.get(entityClass, id);
}
//按条件查询
public List<T> find(String hql,Object param){
return (List<T>)hibernateTemplate.find(hql, param);
}

public HibernateTemplate getHibernateTemplate(){
return hibernateTemplate;
}

}




UserDao代码:
package com.user.dao;

import com.jdbc.bean.User;
import com.util.BasicDao;

public class UserDao extends BasicDao<User> {

}


测试代码:
public static void main(String[] arg0){
Test test = new Test();
UserDao userDao = new UserDao();
List results = userDao.find("from T_USER where USER_NAME LIKE ?", "%zhanghang%");
System.out.println("name          password          lastTime           lastIp");
for(int i=0;i<results.size();i++){
System.out.println(((User)results.get(i)).getUserName()+"          "+((User)results.get(i)).getPassword()+"          "+((User)results.get(i)).getLastTime()+"           "+((User)results.get(i)).getLastIp());
}
}






xml配置文件:
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
             p:driverClassName="${driver}"
             p:url="${url}"
             p:username="${name}"
             p:password="${password}"
             />
            <bean id="locationSessionFactoryBean" class = "org.springframework.orm.hibernate3.LocalSessionFactoryBean" p:dataSource-ref="dataSource">
           <property name="mappingLocations">
              <list>
                   <value>classpath*:/hibernate/user.hbm.xml</value>
              </list>
           </property>
           <property name="hibernateProperties">
              <props>
                  <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
                  <prop key="hibernate.show_sql">true</prop>
              </props>
           </property>
       </bean>
       <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate" p:sessionFactory-ref="locationSessionFactoryBean"></bean>
       <bean id="BasicDao" class="com.util.BasicDao" p:hibernateTemplate-ref="hibernateTemplate"> </bean>


在通过测试代码进行测试的时候 报类型转换异常:
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.util.BasicDao]: Constructor threw exception; nested exception is java.lang.ClassCastException: java.lang.Class
  相关解决方案