基于ONE属性值查询单个实体的最佳方法?

时间:2016-10-28 16:11:14

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

问:根据Entity的属性从Google App Engine Datastore检索 Key的函数如果没有找到这样的对象,则返回null

这是我目前的功能:

public Entity find(DatastoreService datastore, String kind, String property, String value) {
    Filter propertyFilter =
        new FilterPredicate(property, FilterOperator.EQUAL, value);

    Query q = new Query(kind).setFilter(propertyFilter);

    List<Entity> results =
        datastore.prepare(q).asList(FetchOptions.Builder.withDefaults());

    if (results.isEmpty()) {
        return null;
    }

    return results.get(0);
}

我可以使用一次性API吗?或者是否有任何优化建议?

1 个答案:

答案 0 :(得分:0)

您可以使用PreparedQuery#asSingleEntity()

public Entity find(DatastoreService datastore,
        String kind, String property, String value)
        throws TooManyResultsException {
    Filter propertyFilter =
        new FilterPredicate(property, FilterOperator.EQUAL, value);

    Query q = new Query(kind).setFilter(propertyFilter);

    return datastore.prepare(q).asSingleEntity();
}

此代码与您的代码之间唯一真正的区别是基础查询将LIMIT设置为2。