2015-07-20 91 views
0

我实现与反思众所周知通用的DAO模式(由凯文·鲍尔索克斯):通用DAO和org.hibernate.MappingException:未知实体:java.lang.Object继承

public class NewBaseDaoImpl<T, ID extends Serializable> implements NewBaseDao<T,ID> { 

private Class<T> entity; 

@PersistenceContext(unitName = "orm-unit") 
private EntityManager em; 

@SuppressWarnings("unchecked") 
public NewBaseDaoImpl(){ 
    this.entity = (Class<T>)((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; 
} 

@Override 
public T read(ID id) { 
    return em.find(this.getEntity(), id); 
} 

插入数据工作正常,但当我尝试通过ID找到一个实体,像这样:

RepairShop rs = (RepairShop) bean.read(1L); 

我得到:

java.lang.IllegalArgumentException异常:未知的实体:java.lang.Object继承 (org.hibernate.MappingExceptio n:未知实体:java.lang.Object)

什么错?

回答

0

没有看到子类的签名,我无法确定,但可能是因为您的类型层次结构太复杂,无法使用您采用的方法来解析实体类型。你可以尝试TypeTools代替:

entity = (Class<T>)TypeResolver.resolveRawArgument(NewBaseDao.class, getClass()); 

该文档实际上包括generic DAO example为好。

相关问题