我正在制作报告模块。每个报告至少运行一个唯一的数据库查询来收集报告数据。
即使报告查询是唯一的,调用它们的方法也是相同的。
我正在尝试抽象方法以返回List,这样我就可以通过一个常用方法调用我的唯一查询,而不是为每个我试图获得结果的对象设置单独的方法。
该方法看起来像这样:
public List<?> getQueryResults(EntityManager em, String query,
List<String> parameters, Class clazz) {
TypedQuery<?> query = em.createQuery(query, clazz);
// set parameters here...
List<?> results = query.getResultList();
return results;
}
对于所有查询,上述流程都是重复的。必须设置的参数通常是三种不同的配置,所以我可以单独处理。
我想弄清楚的是我如何传递给该方法或以某种方式派生出我需要用于TypedQuery<?>
和List<?>
的类。
我希望我能做到这一点TypedQuery<clazz>
但这不起作用。我应该使用反射并从clazz
参数派生出来吗?
答案 0 :(得分:3)
如果您将通用类型放在clazz
参数上,则可以在返回值中使用该类型:
public <T> List<T> getQueryResults(EntityManager em, String query,
List<String> parameters, Class<T> clazz) {
TypedQuery<T> query = em.createQuery(query, clazz);
// set parameters here...
List<T> results = query.getResultList();
return results;
}
(你不应该在代码中使用原始类型 - 至少你应该有Class<?>
)