2013-08-20 79 views
2

名單目前我的實現是這樣的:返回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()); 

一些地方是查詢將返回整數的列表,而不是報告的列表。有沒有辦法將我的原始代碼重構成更簡單的代碼?

回答

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