如何在 AppEngine 数据存储上执行批量更新
How to perform bulk update on AppEngine Datastore
以下代码无效。有谁知道我如何让它工作?
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);
您的代码有错误。你从不更新 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);
也许其他人可以向您解释为什么它不起作用,但我知道如何使它起作用。
出于某种原因,entities
可迭代对象的行为不像正常的 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);
以下代码无效。有谁知道我如何让它工作?
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);
您的代码有错误。你从不更新 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);
也许其他人可以向您解释为什么它不起作用,但我知道如何使它起作用。
出于某种原因,entities
可迭代对象的行为不像正常的 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);