2

我正在尝试从类似于以下的 Olingo ODATA(版本 2)结果集中获取我的记录计数:

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

上面的 url 返回 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,似乎没有任何帮助。

4

2 回答 2

1

您的问题是从 olingo 发送到 TEIID 的非法 SQL 查询,这可能仍然具有逻辑意义,但会触发 TEIID 错误。然而,olingo 试图SELECT简单地在查询中count(*)添加未使用ORDER BY g0.id的。有关此错误的详细信息,请参阅 jboss 社区中的这两个 错误

虽然这种行为对于 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 回答