org.hibernate.MappingException: Unknown entity: java.lang.Object
2015-04-23 11:52
555 查看
HibernateGenericDao<Users> dao = new HibernateGenericDao<Users>(); 你这样是得不到Users的,原因是这样的: //取得该类的实体类型 Type genType = clazz.getGenericSuperclass(); //判断该类是否是泛型类 if(!(genType instanceof ParameterizedType)) { return Object.class; } 你在使用泛型DAO的时候,采用的是直接使用泛型DAO类: HibernateGenericDao<Users> dao = new HibernateGenericDao<Users>(); 所以,这个dao的类型仍然是HibernateGenericDao; 使用getGenericSuperclass()方法得到的就是这个类的父类,Object;所以你直接返回了一个Object.class,注意,为什么这个方法的名字叫做getGenericSuperclass(),这个superclass已经说明了要使用反射获得具体的泛型类型的方式应该是: class UserDAO extends HibernateGenericDao<User> implements IUserDAO{} 这样就行了,一定要有一个具体类型的子类,UserDAO里面的泛型类型(User)才能够被固定下来。 另外也不用尝试直接把HibernateGenericDao转型为ParameterizedType,因为就算你代码为: HibernateGenericDao<Users> dao = new HibernateGenericDao<Users>(); 你dao.getClass得到的仍然是HibernateGenericDao<T>,这个T对于dao的类型来说,仍然只是个泛型类型,不会是真实的User.class 所以,如果你要坚持直接使用HibernateGenericDAO的话,建议你把User.class作为一个构造方法参数穿进去就可以了。
追问
你说的有道理。我又创建下面的类继承HibernateGenericDao<Users>就可以了 public class UserDaoImpl extends HibernateGenericDao<Users> implements UserDao{ } 你说的将User.class作为一个构造方法参数传进去,我不太明白User.class作为哪一个构造函数的参数传进去,麻烦你能不能说的具体点
回答
public class HibernateGenericDao<T> implements GenericDao<T>{ private Class<T> persistClass; public HibernateGenericDao(){ this(null); } public HibernateGenericDao(Class<T> pclass) { if(pclass==null) persistClass =GenericUtil.getSuperClassGenericType(getClass()); else this.persistClass=pclass; } 如果你要直接用HibernateGenericDao: HibernateGenericDao<Users> dao = new HibernateGenericDao<Users>(Users.class);
相关文章推荐
- org.hibernate.MappingException: Unknown entity: java.lang.Class解决办法
- org.hibernate.MappingException: Unknown entity: java.lang.Class
- 在删除的时候报Unknown entity: java.lang.Long; nested exception is org.hibernate.MappingException
- 在使用hibernate 和spring 构架的框架中如果出现Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm
- org.hibernate.MappingException: Could not determine type for: java.lang.string
- HibernateTemplate删除方式 org.hibernate.MappingException: Unknown entity: java.lang.Long
- HibernateTemplate删除方式 org.hibernate.MappingException: Unknown entity: java.lang.Long
- spring3.0.5 和hibernate3.6整合问题之java.lang.ClassNotFoundException: org.objectweb.asm.Type
- is java.lang.NoClassDefFoundError: org/hibernate/MappingException
- 关于org.hibernate.MappingException: Unknown entity:错误
- 异常:java.lang.ClassNotFoundException: org.hibernate.engine.FilterDefinition
- org.hibernate.MappingException: Could not determine type for: java.util.Set
- (spring+hibernate)java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava
- org.hibernate.MappingException: Could not determine type for: java.util.Collection, for columns: [org.hibernate.mapping.Column(l
- nested exception is org.hibernate.MappingException: Unknown entity:
- java.lang.ClassNotFoundException: org.hibernate.ejb.HibernatePersistence 解决方法
- hibernate4整合spring3.1出现nested exception is java.lang.NoClassDefFoundError: org/hibernate/engine/Sess
- Caused by: java.lang.ClassNotFoundException: org.hibernate.engine.FilterDefinition
- Caused by: java.lang.ClassNotFoundException: org.hibernate.service.jta.platform.spi.JtaPlatform
- Hibernate:java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to co