Java 如何从ODATA结果集中返回计数
我试图从Olingo ODATA(版本2)结果集中获取我的记录计数,类似于下面的结果集: 美元计数 上面的url返回3,如果删除Java 如何从ODATA结果集中返回计数,java,sql,odata,teiid,olingo,Java,Sql,Odata,Teiid,Olingo,我试图从Olingo ODATA(版本2)结果集中获取我的记录计数,类似于下面的结果集: 美元计数 上面的url返回3,如果删除/$count,可以看到3个“值” 我正在本地主机上工作,其中此url: localhost/odata/livingODATA/address/ 返回结果集,但localhost/odata/livingODATA/address/$count返回错误: TEIID30088 Unrelated order by column g0.id cannot be use
/$count
,可以看到3个“值”
我正在本地主机上工作,其中此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
我已尝试通过添加一个
订单,但似乎没有任何帮助。您的问题是从olingo发送到TEID的非法SQL查询,这可能仍然有逻辑意义,但会触发TEID错误。但是,olingo在向查询添加未使用的ORDER BY g0.id
时,尝试选择只需count(*)
。有关此错误的详细信息,请参阅jboss社区中的
虽然这种行为对于ApacheOlingo开发团队来说应该是一个问题,但是$inlinecount=allpages
uri选项至少在目前是一个可能的解决方法。这会将odata.count
属性添加到包含odata查询总计数的结果对象中,忽略任何$top
或$skip
选项。这是一项用于分页目的的功能
您的URI可能是
localhost/odata/livingODATA/address?$inlinecount=allpages
或者,为了防止服务一次加载所有数据,您可以添加$top=0
,并且只加载cont(*)
:
我希望这有助于更进一步。您可以通过
ODataEntityProviderPropertiesBuilder propertiesBuilder = EntityProviderWriteProperties
.serviceRoot(serviceRoot).inlineCountType(InlineCount.ALLPAGES).inlineCount(dataSet.getTotal());
顺便说一句,它正在使用版本2,这是一个很好的解决方案,但是,这并不能解决我的问题。因为“计数”等于我的top值。它没有显示odata.count:“5”,而是显示_count:“5”(或顶部的任何内容)。我想知道数据库上的数据格式是否是一个问题,不应该认为这个操作是4.0版本的一部分,但在2.0“uri约定”中被引用了:糟糕的文档。谢谢你的帮助
localhost/odata/livingODATA/address?$inlinecount=allpages&$top=0
ODataEntityProviderPropertiesBuilder propertiesBuilder = EntityProviderWriteProperties
.serviceRoot(serviceRoot).inlineCountType(InlineCount.ALLPAGES).inlineCount(dataSet.getTotal());