目前我的实施是这样的:
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列表。有没有办法将我的原始代码重构为更简单的东西?
答案 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();