2

以下のような Olingo ODATA (バージョン 2) の結果セットからレコードの数を取得しようとしています。

http://services.odata.org/OData/OData.svc/Categories/ $count

上記の URL は 3 を返します/$count

私はこのURLのローカルホストで作業しています:

localhost/odata/livingODATA/address/

結果セットをlocalhost/odata/livingODATA/address/$count返しますが、エラーを返します:

TEIID30088 Unrelated order by column g0.id cannot be used in a SET query, with SELECT DISTINCT, or GROUP BY

を追加しようとしましたがorder by、何も役に立たないようです。

4

2 に答える 2

1

あなたの問題は、oligo から TEIID に送信された不正な SQL クエリです。これは論理的には意味があるかもしれませんが、TEIID エラーを引き起こします。しかし、oligo はクエリに未使用を追加しながらSELECT単純化しようとしています。このエラーの詳細については、jboss コミュニティの2 つのバグを参照してください。count(*)ORDER BY g0.id

この動作は Apache Olingo 開発者チームにとって問題になるはずですが、$inlinecount=allpagesuri-option は少なくとも現時点では回避策になる可能性があります。これにより、またはオプションodata.countを無視して、odata クエリの合計数を含む結果オブジェクトにプロパティが追加されます。これは、ページネーションを目的とした機能です。$top$skip

公式の OData v2 の例

http://services.odata.org/OData/OData.svc/Products?$inlinecount=allpages

あなたのURIは

localhost/odata/livingODATA/address?$inlinecount=allpages

または、サービスがすべてのデータを一度にロードしないようにするには、次のように追加$top=0してロードするだけですcoun t(*):

localhost/odata/livingODATA/address?$inlinecount=allpages&$top=0

これがさらに数歩進むのに役立つことを願っています。

于 2014-06-07T01:32:42.510 に答える
1

インライン カウントの値は、次のようにオーバーライドできます。

ODataEntityProviderPropertiesBuilder propertiesBuilder = EntityProviderWriteProperties
                            .serviceRoot(serviceRoot).inlineCountType(InlineCount.ALLPAGES).inlineCount(dataSet.getTotal());

ちなみにバージョン2で動いています

于 2015-01-30T10:35:22.003 に答える