我想通过参数Entity进行GenericDao传递,但我不知道如何将Entidad转换为Object。我试过放GenericDaoWithOrder<Entidad extends Object>
但不起作用。
public abstract class GenericDao<Entidad> {
@PersistenceContext
private EntityManager em;
public List<Entidad> findAll(Integer start, Integer maxResult) {
TypedQuery<Entidad> query = em.createNamedQuery(Entidad.class.getCanonicalName() + ".findAll", Entidad.class);
query.setFirstResult(start);
query.setMaxResults(maxResult);
return query.getResultList();
}
}
答案 0 :(得分:1)
在您显示的代码中,Entidad
是参数,而不是类名,因此您无法引用Entidad.class
。解决此类问题的常用方法是将表示真实类的Class
对象传递给GenericDao
的构造函数,例如
public abstract class GenericDao<E> {
@PersistenceContext
private EntityManager em;
private Class<E> clazz;
protected GenericDao(Class<E> clazz) {
this.clazz = clazz;
}
public List<E> findAll(Integer start, Integer maxResult) {
TypedQuery<E> query = em.createNamedQuery(clazz.getCanonicalName() + ".findAll", clazz);
query.setFirstResult(start);
query.setMaxResults(maxResult);
return query.getResultList();
}
}
(我已将类型参数名称缩短为E
,以使其更清楚,它是一个参数而不是真实类的名称)。然后,具体的子类传入相关的Class
:
public class UserDao extends GenericDao<User> {
public UserDao() {
super(User.class);
}
}