2

目前我的实现是这样的:

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());

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

4

1 回答 1

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();
于 2013-11-12T16:31:16.080 回答