Java 如何从ODATA结果集中返回计数

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

我试图从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 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());