通用DAO和org.hibernate.MappingException:未知实体:java.lang.Object

时间:2015-07-20 14:16:28

标签: java hibernate dao

我用反射(Kevin Bowersox)实现了一个众所周知的泛型dao模式:

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.MappingException:未知实体:java.lang.Object)

有什么问题?

1 个答案:

答案 0 :(得分:0)

如果没有看到子类的签名,我无法确定,但可能是您的类型层次结构过于复杂,无法使用您正在采用的方法来解析实体类型。您可以尝试使用TypeTools

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

文档实际上也包含generic DAO example