在Google App Engine DataStore(Java)中存储和搜索字符串数组

时间:2016-02-12 11:15:05

标签: java google-app-engine google-cloud-datastore

我正在尝试实施多对一关系。我计划将一个模型的一组键(数据存储实体键)存储在另一个模型的实体中List<String>

e.g。假设模型A(a1,a2,a3,a4)的4个实体分别具有数据存储键:key1,key2,key3和key4。现在我存储了一个模型B的实体,它有一个名为“ids”的属性为List<String>。 “ids”将这些String作为元素:key1,key2,key3和key4。

直到现在一切都很好。 但是,我现在如何查询每个ID的模型B?

我想做的是这样的事情:

query.setFilter(FilterOperator.EQUAL.of(ids,"key1"))

显然现在无法做到这一点。 现在我正在做的是获取每个B实体的ids属性,然后手动反序列化为字符串列表,然后检查密钥是否存在。

正如您所看到的,这是非常低效的。我该怎么办?我应该将这些映射存储在单独的模型中吗?我不想处理联接,但如果我不能得到除现有解决方案之外的任何其他内容,我将不得不这样做。

我没有使用JPA或JDO,我打算不使用它们。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

使用EQUAL过滤器的查询适用于值列表。确保在执行此查询时传递正确的值。

例如,如果您只在服务器端使用此实体,则可以存储List。

如果您在客户端需要此列表,并且始终存储同类实体的密钥,则可以存储用于创建这些列表的ids(列表)或“名称”(列表)列表键。这将占用更少的空间。