使用泛型的javax.persistence.Query

时间:2011-05-23 15:55:28

标签: java generics

我正在尝试使用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

2 个答案:

答案 0 :(得分:2)

使用JPA 2及其EntityManager.createNamedQuery(jpql, Class)方法。 它会返回TypedQuery,这是你应该使用的。

答案 1 :(得分:2)

List中使用它之前,您必须声明泛型类型:

public <T extends UtilsStatus> List<T> allStatus(Class<T> type)