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)year 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

collはのCollectionObject[]あるため、次のように解析できます。

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

    }

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 []には、合計と関数呼び出しの結果の2つの要素が含まれます。

したがって、結果を繰り返し処理し、結果ごとに意味のあるオブジェクトを作成します。

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 に答える