Criteria API:相同的查询,不同的结果集类型(构造函数表达式)

时间:2011-03-20 14:59:11

标签: java jpa

我有一个生成JPA标准的方法:

private CriteriaQuery<ResultSetType> createQuery (ReportFilter reportFilter) {
    List<Predicate> criteria = new ArrayList<Predicate>();
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<ResultSetType> c = cb.createQuery(ResultSetType.class);
    ...
    c.multiselect(...);
    ...
    return c;
}

现在我想用不同的构造函数表达式(ResultSetType)创建几个查询。

最优雅的解决方案是什么?参数Type始终相同(ReportFilter),但对于不同的构造函数表达式(ResultSetType),我想创建一个不同的选择c.multiselect(...)。

有什么建议吗?

BR,Reen

1 个答案:

答案 0 :(得分:0)

private <T> CriteriaQuery<T> genericCriteria(ReportFilter reportFilter, Class<T> clazz) {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<T> c = cb.createQuery(clazz);
    ....
    if (clazz.equals(ResultSetType.class)) {
        c.multiselect(...);
    } else {
    }
    ...
    return c;
}