java - 使用 objectify 对名称/值对象的列表属性上的数据存储实体进行排序

标签 java google-cloud-datastore objectify

我想使用 Google Cloud Datastore 列出我的实体。 我想检索它们,并根据属性的名称按属性值排序。

Java 类模型:

public class ContainerEntity {
    @Index
    String id;
    @Index
    private List<NameValueProperty> properties;
}

public class NameValueProperty {
    @Index
    private String name;
    @Index
    private String value;
}

数据集示例:

"items": [
{
   "id": "114191058616700893306-20180416-120212-125-Qotx9AlsSRHg4cJhya",
   "properties": [
    {
     "name": "propertyIWantToOrderBy",
     "value": "BBBB"
    },
    {
     "name": "propertyIDoNotCareTheOrder",
     "value": "1522540800000"
    }
   ]
  },
  {
   "id": "114191058616700893306-20180416-120718-199-Qotx9AlsSRHg4cJhya",
   "properties": [
    {
     "name": "propertyIWantToOrderBy",
     "value": "AAAA"
    },
    {
     "name": "propertyIDoNotCareTheOrder",
     "value": "1522540800000"
    }
   ]
  }
}

如何使用 objectify 来做到这一点? 我尝试使用这段代码,但它不起作用:

Query<ContainerEntity> query = ObjectifyService.ofy().load().type(ContainerEntity.class);
query = query.filter("properties.name = ", "propertyIWantToOrderBy")
             .order("properties.value");

首先它进行过滤(我不想要),然后看起来名称为“propertyIWantToOrderBy”的属性的顺序不正确。有什么解决方案/解决方法可以做到这一点吗?想做一些类似 order("properties.value whereproperty.name='propertyIWantToOrderBy'") 的事情。 这个设计的要点是拥有一个动态实体

对象化版本:5.1.22 JDK:8

最佳答案

当您尝试对列表属性进行过滤和排序时,它们可能会令人困惑。尝试这种方法:

public class ContainerEntity {
    @Id
    String id;
    @Index
    private Map<String, String> properties = new HashMap<>();
}

现在您的查询如下所示:

ofy().load().type(ContainerEntity.class).order("properties.propertyIWantToOrderBy");

顺便说一句,您没有 @Index id,它们不会存储为常规属性。他们需要 @Id 注释。

关于java - 使用 objectify 对名称/值对象的列表属性上的数据存储实体进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49857743/

相关文章:

Java ResultSet.getTimestamp() 将毫秒附加到输出

java - 使用 libffmpeg 时如何计算 AVPicture.data[x] 指针 (YUV420p) 的大小

java - 对象化 + JSP : displaying 1:N relationships

java - 使用对象化的多对多关系?

java - Java 1.5 下 HTTP 连接超时

java - 如何在声明时用特定值初始化数组的每个元素?

google-app-engine - GAE : AssertionError: No api proxy found for service "datastore_v3"

python - put() 后 App Engine 数据存储中的读取延迟

google-app-engine - 创建子记录时抛出 Invalid Key 消息

java - 加载的实体有父级但没有@Parent