我正在尝试使用Generics实现namedQuery(javax.persistence.Query)。这适用于单个对象:
public <T extends Status> T fStatusByCode(Class<T> type, String code)
{
Query nq = getManager().createNamedQuery("f"+type.newInstance().getClass().getSimpleName());
nq.setParameter("code", code);
T result=(T)nq.getSingleResult();
return result;
}
不幸的是,这不能直接应用于获取所有对象:
public List<T extends UtilsStatus> allStatus(Class<T> type)
{
...
List<T> lResult = (List<T>)q.getResultList();
return lResult;
}
方法公开列表中的扩展似乎是非常糟糕的错误,但我不明白。如何获得List<T>
的语法?
谢谢你,Thor
答案 0 :(得分:2)
使用JPA 2及其EntityManager.createNamedQuery(jpql, Class)
方法。
它会返回TypedQuery
,这是你应该使用的。
答案 1 :(得分:2)
在List
中使用它之前,您必须声明泛型类型:
public <T extends UtilsStatus> List<T> allStatus(Class<T> type)