以下代码无效。有谁知道我怎么可能让它工作?
Query q = new Query("Product");
Iterable<Entity> entities = datastore.prepare(q).asIterable();
for (Entity entity : datastore.prepare(q).asIterable()) {
entity.setProperty(“sale”, false);
}
datastore.put(entities);
sale
是一个全新的字段,我将添加到实体类中。所以它还不存在。
更新
我将其修复如下,但代码仍无法正常工作
Query q = new Query("Product");
Iterable<Entity> entities = datastore.prepare(q).asIterable();
for (Entity entity : entities) {
entity.setProperty(“sale”, false);
}
datastore.put(entities);
答案 0 :(得分:2)
您的代码中存在错误。您永远不会更新entities
。它应该是:
Query q = new Query("Product");
List<Entity> entities = datastore.prepare(q).asList(FetchOptions.Builder.withDefaults());
for (Entity entity : entities) {
entity.setProperty(“sale”, false);
}
datastore.put(entities);
答案 1 :(得分:1)
也许其他人可以向您解释为什么它不起作用,但我知道如何使工作。
由于某种原因,entities
iterable的行为不像正确的Java集合。在Java集合中,元素是指针。但无论出于何种原因,你在for循环中获得的每个实体都是一个独立的深层副本。因此,请执行以下操作,它将起作用
Query q = new Query("Product");
List<Entity> products = new ArrayList<Entity>();
for (Entity entity : datastore.prepare(q).asIterable()) {
entity.setProperty("sale", false);
products.add(entity);
}
datastore.put(products);