问题描述
当我在一个容器上运行一个选择查询(“从c中选择前1个*”)时,我得到:
{
"id": "102","sid": "s-102","name": "Bena","grade": "2","_rid": "ruxSAIiGPgYCAAAAAAAAAA==","_self": "dbs/ruxSAA==/colls/ruxSAIiGPgY=/docs/ruxSAIiGPgYCAAAAAAAAAA==/","_etag": "\"00006000-0000-1900-0000-5f4354320000\"","_attachments": "attachments/","_ts": 1598247986
}
我不想要_rid,_self,_etag等,我只想要实体 例如:
{
"id": "102","grade": "2"
}
当前代码:
CosmosDatabase db1=client.getDatabase("Student");
CosmosContainer c=db1.getContainer("Stu");
CosmosQueryRequestOptions options = new CosmosQueryRequestOptions();
options.setMaxBufferedItemCount(5);
String sql = "SELECT TOP 1 * FROM s ";
CosmosPagedIterable<JSONObject> cpi=c.queryItems(sql,options,JSONObject.class);
解决方法
您应该创建您实体的类(不要使用JSONObject)。 这是我的简单测试代码:
database = client.getDatabase(databaseName);
container = database.getContainer(containerName);
CosmosPagedIterable<User> usersPagedIterable = container.queryItems("select top 1 * from c",new QueryRequestOptions(),User.class);
if(usersPagedIterable.iterator().hasNext()){
User user = usersPagedIterable.iterator().next();
System.out.println(user.toString());
}
debug的屏幕截图(没有_rid,_self,_etag等):
,将SQL更改为以下内容 SELECT TOP 1 s.id,s.sid,s.name,s.grade,FROM s
如果希望将结果反序列化为域对象,只需将其创建为java bean,然后将其传递给queryItems方法即可,而不是“ JSONObject.class”