键仅使用键查询

时间:2012-02-22 20:33:54

标签: java google-app-engine

我想使用密钥进行简单的Key-Only查询(以便测试数据存储区中是否存在)。

这是java中最简单的方法吗?

3 个答案:

答案 0 :(得分:4)

是的,这是可能的!

尝试这样的事情:

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Query gaeQuery = new Query(entityName);
gaeQuery.setKeysOnly();     
gaeQuery.addFilter("__key__", FilterOperator.EQUAL, key);
PreparedQuery pq = datastore.prepare(gaeQuery);
List<Entity> results = pq.asList(FetchOptions.Builder.withLimit(1));

Key elementKey = null;
if (results.size() == 1) {
    elementKey = results.get(0).getKey();
}   

答案 1 :(得分:2)

为了按键检查一个实体的存在,最简单和最便宜的只是使用get()

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
datastore.get(KeyFactory.createKey(kind, long) )

Get(1读取操作)查询更便宜(1读+ 1小):http://code.google.com/appengine/docs/billing.html

答案 2 :(得分:0)

如果您想测试存在,可以使用Victor的建议,但取而代之的是:

return datastore.prepare(gaeQuery)
    .countEntities(FetchOptions.Builder.withLimit(1)) > 0;