2014-06-06 13 views
2

我想從一個Olingo ODATA我的記錄數(第2版)結果集類似下面的一個:如何從ODATA結果返回計數設定

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

以上url返回3,並且有3個'值',你可以看到如果你刪除/$count

我正在本地主機,在這個網址上:

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,似乎沒有任何幫幫我。

回答

1

你的問題是從olingo發送到TEIID一個非法的SQL查詢,其仍可邏輯意義,但觸發TEIID錯誤。然而,olingo試圖SELECT只是count(*),同時添加一個未使用ORDER BY g0.id查詢。有關此錯誤的詳細信息,請參閱jboss社區中的那些twobugs

雖然這種行爲應該是爲Apache Olingo開發團隊一個問題,$inlinecount=allpages URI的選擇可能是至少在目前可能的解決方法。這增加了odata.count屬性包含您的OData查詢總數結果對象,不考慮任何$top$skip選項。這是一個用於分頁目的的功能。

Official OData v2 Example

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 

我希望這有助於進一步邁出幾步。

+0

工作這是一個很好的解決方案,但是,這並沒有解決這個問題,我的方式覆蓋爲直列計值。因爲「計數」等於我對頂級的價值。而不是顯示odata.count:「5」它顯示_count:「5」(或任何頂部)。我想知道是否數據庫上的數據格式是一個問題,它不應該是,雖然 –

+0

似乎操作是4.0版本的一部分,但在2.0'Uri約定'中引用:http://www.odata.org/文檔/ odata-version-2-0/uri-conventions /糟糕的文檔。謝謝您的幫助 –

1

您可以通過

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

通過它與第2版