1

我有一个应用程序,我需要使用 sum() 和 Func(year,...) 函数触发 jpql 查询,这意味着只有 2 个字段将被提取并存储到一个集合中,然后将这个集合返回到托管 bean。现在我的问题是我如何使用这个集合来检索每个值。下面是会话 bean 和托管 bean 代码:

    public Collection getScripQtyYearWise(Integer scripID)
 {
    try
    {
     Collection coll=em.createQuery("select sum(t.tradeExecutedQuantity), FUNC('YEAR',t.tradeDateTime) from TradeStock t where t.scripID.scripID = :scripID group by FUNC('YEAR',t.tradeDateTime) ").setParameter("scripID", scripID).getResultList();
     return coll;
    }catch(Exception e){return null;}
 }

例如返回的数据: sum(qty) 年 210 2011 198 2012 我需要提取在 followinf 托管 bean 中返回的每条记录中的每个值:

  objejb=(StockCommodityEJBStateless) new InitialContext().lookup("StockCommodityTest");
 Collection coll=objejb.getScripQtyYearWise(scripID1); // how to use this collection?
4

2 回答 2

2

collCollectionof Object[],所以你可以像这样解析它:

    for (Object o : coll) {
        Object[] res = (Object[]) o;
        Object sum = res[0];
        Object year = res[1];

    }

如果你想要一个 List 而不是 Object[] 你可以像这样改变你的选择:

Collection coll=em.createQuery("select new list(sum(t.tradeExecutedQuantity), FUNC('YEAR',t.tradeDateTime)) from TradeStock t where t.scripID.scripID = :scripID group by FUNC('YEAR',t.tradeDateTime) ").setParameter("scripID", scripID).getResultList();

在这里阅读更多!

于 2012-06-06T10:29:11.680 回答
1

这样的查询将返回一个List<Object[]>. 每个 Object[] 将包含两个元素:总和和函数调用的结果。

因此,迭代结果,并为每个结果创建一个有意义的对象:

public List<ScripQtyYearWise> getScripQtyYearWise(Integer scripID) {
    List<Object[]> list = em.createQuery("...").list();
    List<ScripQtyYearWise> result = new ArrayList<ScripQtyYearWise>(list.size());
    for (Object[] row : list) {
        result.add(new ScripQtyYearWise((Long) row[0], (Date) row[1]));
    }
    return result;
}
于 2012-06-06T10:28:41.797 回答