我试图从Olingo ODATA(版本2)结果集中获取我的记录计数,类似于下面的结果:
http://services.odata.org/OData/OData.svc/Categories/ $计数
以上网址返回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
,似乎无济于事。
答案 0 :(得分:1)
您的问题是从olingo发送到TEIID的非法SQL查询,这可能仍然具有逻辑意义,但会触发TEIID错误。但是,olingo在向查询添加未使用的SELECT
时尝试count(*)
只是ORDER BY g0.id
。有关此错误的详细信息,请参阅jboss社区中的two bugs。
虽然这种行为应该是Apache Olingo开发团队的一个问题,但$inlinecount=allpages
uri-option至少可能是目前可能的解决方法。这会向结果对象添加odata.count
属性,其中包含odata查询的总计数,忽略任何$top
或$skip
选项。这是一个用于分页目的的功能。
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
我希望这有助于更进一步。
答案 1 :(得分:1)
您可以通过
覆盖内联计数的值ODataEntityProviderPropertiesBuilder propertiesBuilder = EntityProviderWriteProperties
.serviceRoot(serviceRoot).inlineCountType(InlineCount.ALLPAGES).inlineCount(dataSet.getTotal());
顺便说一下,它正在使用版本2