spring 整合 hibernate 使用泛型的异常 本帖最后由 xiaogutou1 于 2013-10-20 16:52:47 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 估计是你BasicDAO的构造函数里出问题,你要获得实体类的类型,用注解吧,比这个简单 struts1 看着就很不爽啊 用2 不是很好嘛? BasicDAO 应该不能实例化吧,你想实例化的应该是UserDao ,Spring文件里面配置换下试试看。 public BasicDao(){ //Type genType = getClass().getGenericSuperclass(); //Type[] params=((ParameterizedType)genType).getActualTypeArguments(); //entityClass = (Class)params[0];}把构造方法里面的代码先注释掉,再测试一下。还有那个public T get(Serializable id)这个方法也注释掉,因为用到了entityClass.先确定问题在哪里。如果注释掉运行find能找到数据而且不报错的话就想想如何替代这个entityClass的获取方式。因为没有使用过SSH框架,意见只供参考。 额没有用struts哟!只有spring和hibernate 我不熟悉你的BasicDao构造方法里获取实体类的方法,所以也不知道是什么错,给你提供一种方法,我也写过类型的泛型DAO,获取实体类我是用的注解首先定义一个注解package com.web.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * 用于标注该DAOImpl类所对应的实体类的名字是什么,以便获取相应的实体类 * @author * */@Retention(RetentionPolicy.RUNTIME)//代表在运行期保留注解@Target(ElementType.TYPE)//代表用于类中public @interface EntityClassName { /** * 标注对应的实体类名 * @return 对应的实体类名 */ String value();}然后在BasicDao里写一个方法/** * 获取该DAO实现类的对应的实体类 * @return 实体类 * @throws Exception */ private Class<?> getPOJOClass() throws Exception{ Class<?> pojoClass = null; //先判断该实现类的实体类注解是否存在 if(this.getClass().isAnnotationPresent(EntityClassName.class)){ //如果存在获取该注解(即实体类的名字) String className = ((EntityClassName)getClass(). getAnnotation(EntityClassName.class)).value(); //通过反射获取该实体类 pojoClass = Class.forName(className); } return pojoClass; }你要用到实体类的时候就用这个方法获取然后在你的UserDAO上打上这个注解package com.user.dao; import com.jdbc.bean.User;import com.util.BasicDao;@EntityClassName("com.web.bean.User") //标注该DAO类是对应于哪个实体类,(包名改成你自己的)public class UserDao extends BasicDao<User> { } 已经解决了!!只要吧basicDao构造器中的代码移至子类Dao的构造器之中即可!! itext 生成报表 求助 面试题 啥是web services 想学j2ee的东西 数据库中html语言显示到页面 学习JSP 大家给推荐本书吧 奇怪的servlet问题。 tomcat+jbuilder+struts1.1编译错误,请指教 这个struts-config.xml文件配置有什么问题? jboss里连接sql server200-出错,大家来看看 jackson处理json,类中的某个属性是个父类,根据json字符串可变时,怎么转换 搞过自动生成class文件的进
public BasicDao(){
//Type genType = getClass().getGenericSuperclass();
//Type[] params=((ParameterizedType)genType).getActualTypeArguments();
//entityClass = (Class)params[0];
}把构造方法里面的代码先注释掉,再测试一下。还有那个public T get(Serializable id)这个方法也注释掉,因为用到了entityClass.
先确定问题在哪里。如果注释掉运行find能找到数据而且不报错的话就想想如何替代这个entityClass的获取方式。
因为没有使用过SSH框架,意见只供参考。
首先定义一个注解package com.web.annotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/**
* 用于标注该DAOImpl类所对应的实体类的名字是什么,以便获取相应的实体类
* @author
*
*/@Retention(RetentionPolicy.RUNTIME)//代表在运行期保留注解
@Target(ElementType.TYPE)//代表用于类中
public @interface EntityClassName {
/**
* 标注对应的实体类名
* @return 对应的实体类名
*/
String value();}
然后在BasicDao里写一个方法/**
* 获取该DAO实现类的对应的实体类
* @return 实体类
* @throws Exception
*/
private Class<?> getPOJOClass() throws Exception{
Class<?> pojoClass = null;
//先判断该实现类的实体类注解是否存在
if(this.getClass().isAnnotationPresent(EntityClassName.class)){
//如果存在获取该注解(即实体类的名字)
String className = ((EntityClassName)getClass().
getAnnotation(EntityClassName.class)).value();
//通过反射获取该实体类
pojoClass = Class.forName(className);
}
return pojoClass;
}
你要用到实体类的时候就用这个方法获取然后在你的UserDAO上打上这个注解package com.user.dao;
import com.jdbc.bean.User;
import com.util.BasicDao;@EntityClassName("com.web.bean.User") //标注该DAO类是对应于哪个实体类,(包名改成你自己的)
public class UserDao extends BasicDao<User> {
}