将JPA / Ebean查询作为整数列表返回

时间:2013-08-20 16:35:04

标签: java jpa ebean

目前我的实施是这样的:

ArrayList<Reports> listOfRep = new ArrayList<Reports>();
ArrayList<Integer> listOfId = new ArrayList<Integer>();

listOfRep.addAll(Ebean.find(Reports.class)
    .where()
    .eq("Name", "someName")
    .findList());

for (Reports r : listOfRep) {
    listOfId.add(r.id);
}

现在我正在做两个循环来获取ID的列表(整数)。我的报告模型有一个字段int id。我想做一些像

这样的事情
listOfId.addAll(Ebean.find(Reports.class)
    .select("id")
    .where()
    .eq("Name", "someName")
    .findList());

该查询将返回Integer列表而不是Reports列表。有没有办法将我的原始代码重构为更简单的东西?

1 个答案:

答案 0 :(得分:0)

您可以使用投影进行尝试。像这样:

CriteriaBuilder cb = em.getCriteriaBuilder();
// for an Integer result :
CriteriaQuery<Integer> cq = cb.createQuery(Integer.class);
Root<Reports> reports = cq.from(Reports.class);
CompoundSelection<Integer> projection = cb.construct(Integer.class, reports.get("id"));

cq.where(cb.equal(reports.get("Name"), "someName")).select(projection);
List<Integer> resultList = em.createQuery(cq).getResultList();