GAE - 数据存储区查询的declareParameters是否与setParameters相对应?

时间:2013-04-19 19:17:59

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

Datastore Queries documentation中,可以看到使用Query对象方法调用设置的查询示例:

Query q = pm.newQuery(Person.class);
q.setFilter("lastName == lastNameParam");
q.setOrdering("height desc");
q.declareParameters("String lastNameParam");
List<Person> results = (List<Person>) q.execute("Smith");

我喜欢这种风格,因为它使每个部分都可读并且易于理解正在做什么。但是,最后它们在实际的execute行中为“lastNameParam”传递值“Smith”。从我的观点来看,为了保持一致,应该有一个setParameters Query方法,以便传递给参数的值与声明参数名称的方式一致。我无法为Query找到这样的方法。有人存在吗?如果没有,有什么理由不是吗?或者我的想法是愚蠢的,我的推理是没有根据的?非常感谢!

1 个答案:

答案 0 :(得分:1)

现有方法可以做到这一点。函数setParameter()可用。例如,问题中的代码可以通过以下方式完成:

Query q = pm.newQuery(Person.class);
q.setFilter("lastName == lastNameParam");
q.setOrdering("height desc");
q.declareParameters("String lastNameParam");
q.setParameter("lastNameParam", "Smith");
List<Person> results = (List<Person>) q.execute();

我可能已经严重限制了原始问题,因为这与Google App Engine或Google Datastore没什么关系,而且主要涉及Java的Query类。无论如何,这是可行的解决方案。