1

次のような動的クエリをJPAに実装したいと思います。

public Collection getOrderReportByUserName(String userName, Integer scripID, String orderStatus, String orderType) 
{     
    String strQuery = "Select o,t from OrderStock o,TradeStock t where o.userName.userName = "+ userName +" and t.userName.userName = "+ userName;
    if(scripID > 0)
    {
        strQuery += " and o.scripID.scripID = " + scripID;
    }
    if(orderStatus != null)
    {                        
        if(orderStatus.equals("Executed"))
        {
            strQuery += " and o.OrderID = t.OrderID and o.OrderStatus = " + orderStatus;
        }
        else
        {
            if(scripID > 0 && orderType != null)
            {
                String sQuery = "Select o from OrderStock o where o.UserName = " + userName +" and o.ScripID = "+ scripID+" and o.BuySell = "+ orderType;
                Collection<OrderStock> os = em.createQuery(sQuery).getResultList();
                Iterator it = os.iterator();
                Boolean ok = false;
                while(it.hasNext())
                {
                    OrderStock osObj  = (OrderStock)it.next();
                    Integer pending = osObj.getPendingQuantity();
                    Integer order = osObj.getOrderQuantity(); 
                    if(pending > 0 && ((order-pending) != 0))
                    {
                        ok = true;
                        break;
                    }
                }
                if(ok == true)
                {
                    strQuery += " and o.OrderID = t.OrderID and o.OrderStatus = " + orderStatus;
                }
                else
                {
                    strQuery += " and o.OrderStatus = " + orderStatus;
                }
            }
        }
    }
    if(orderType != null)
    {
        strQuery += " and o.BuySell = " + orderType;
    }
    Collection c = em.createQuery(strQuery).getResultList();
    return c;
}

結果をデータテーブルにバインドしたいのですが、ご覧のとおり、2つのテーブルで構成されるコレクションを返したいと思います-orderStocktradeStock。では、データテーブルでこのコレクションにアクセスするにはどうすればよいですか?そして、結果の動的クエリのパラメータを設定するにはどうすればよいですか?

4

2 に答える 2

1
  • クエリのパラメーター化については、この記事を参照してください。

  • getOrderReportByUserNameメソッドによって返されるコレクションには、 Object[2]要素が含まれます。最初の要素はOrderStockオブジェクトのインスタンスになり、2 番目の要素は TradeStock オブジェクトのインスタンスになります。受信したエンティティを永続化するには、 EntityManagerクラスのpersistまたはmergeメソッドを使用する必要があります。

  • JPA 2.0 を使用している場合は、Criteria APIを使用してタイプ セーフなクエリを作成できます。JPQL クエリをハードコーディングするよりもはるかに優れています。

于 2012-05-29T12:44:20.943 に答える
0

tradeStockウルコードで名前の変数を作成していませんが'c'、最後の3行目の変数はあなたのものだと思います'tradeStock'. したがって、クラスから 2 つのリストを返したい場合は、新しいクラスを作成する必要がありますStock。Stock には 2 つのメンバー リスト、つまりtradeStockandoverStockと getter/setter があります。このメソッドでStock.when のインスタンスを作成します。クエリから resultList をフェッチすると、それが設定され、メソッドからStock返さStockれます。

于 2012-05-29T12:40:06.883 に答える