对象的对象查询

时间:2017-09-27 21:33:59

标签: java database google-cloud-datastore google-cloud-platform objectify

假设我有一个名为EntityA的实体类型,我有一个EntityA ID列表。如何查询我的数据库中的所有EntityA实体,其中id不在我所拥有的EntityA ID列表中?

我尝试做类似的事情:

ofy().load().type(EntityA.class).filter("!IN", entityAKeys);

我怎么能让它运作?有可能吗?

2 个答案:

答案 0 :(得分:0)

不,这不受支持,因为Cloud Datastore仅允许索引支持的查询确保它们不会因为您的数据集扩展而中断。

您必须查询EntityA中的所有实体,并自行过滤掉客户端的entityAKeys中的实体。

答案 1 :(得分:0)

所以我最终做了:

List<Key<MXChallenge>> keyList = new ArrayList<>();
List<Key<MXChallenge>> searchInKeys = ofy().load().type(MXChallenge.class).keys().list();

for(Long id : alreadyRetrieved){
    keyList.add(Key.create(MXChallenge.class, id));
}

searchInKeys.removeAll(keyList);

QueryResultIterator<MXChallenge> iteratorChallenges = ofy().load()
        .type(MXChallenge.class).filter("colour", "blue").filterKey("IN", searchInKeys).iterator();

我在性能方面也不确定,但由于它是“仅限按键”的操作,我认为应该没问题。