在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找到这样的方法。有人存在吗?如果没有,有什么理由不是吗?或者我的想法是愚蠢的,我的推理是没有根据的?非常感谢!
答案 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类。无论如何,这是可行的解决方案。