Objectify - Map的部分索引<>基于键名的对象

时间:2015-05-06 10:14:31

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

我正在尝试使用基于地图键名称的条件对Map进行部分索引。

我的目标是仅对A键进行索引,因为我知道我只会查询它。

这是一个简单的演示代码:

Map<String, String> map = new HashMap<>();
map.put("A", "1");
map.put("B", "2");

MainClass mainClass = new MainClass();
mainClass.mapIndexed = map;
mainClass.mapUnindexed = map;

ObjectifyService.register(MainClass.class);
ObjectifyService.ofy().save().entities(mainClass);

和测试类

@Entity
public class MainClass {

    @Id
    Long id;

    @Unindex
    Map<String, String> mapUnindexed;

    @Index
    Map<String, String> mapIndexed;
}

从结果中可以看出,AB键都被编入索引,但我只想索引A键。 enter image description here

我已经知道Objectify提供了partial-indexing的概念,但似乎我只能在整个地图上使用它(索引整个地图或根本不对地图编制索引)。

有没有办法根据自定义条件仅为地图的某些键编制索引? (就像钥匙的名字一样)

1 个答案:

答案 0 :(得分:0)

有趣。不幸的是,目前还没有一种简单的方法可以做到这一点;请在Github中提交增强请求。

如果这对于立即解决是非常关键的(即,您在数据存储区中刻录了大的$),则可以复制EmbeddedMapTranslatorFactory,更改save()代码,并在该字段上启用此新版本使用@Translate注释。

或者,如果您喜欢冒险并希望提交公关,那么重要的变化就是将Path传递给If<?,?>方法。