无法删除在 Java GAE 中设置了特定 属性 的实体
Trouble deleting entity with specific property set in Java GAE
我有这样创建的实体:
public String addNewStockName(String newStock) throws DelistedException {
Entity stock = new Entity("Stocks");
stock.setProperty("Name", newStock);
ds.put(stock);
return "OK";
}
正在尝试像这样删除特定实体:
public String deleteStockName(String stockName){
Key key = KeyFactory.createKey("Stocks", stockName);
ds.delete(key);
return "OK";
}
并且它不会删除具有 属性 'stockName' 的实体。为什么?
您的 Stocks
实体有一个名为 "Name"
的 属性。这与 键名 .
不同
您必须执行查询以获取与 "Name=?"
的过滤器相匹配的实体或实体键。
像这样:
public String deleteStockName(String stockName) {
DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
Filter f = new FilterPredicate("Name", FilterOperator.EQUAL, stockName);
Query q = new Query("Stocks").setFilter(f).setKeysOnly();
List<Entity> results = ds.prepare(q)
.asList(FetchOptions.Builder.withDefaults());
if (results.isEmpty())
return "Not Found!";
ds.delete(results.get(0).getKey());
return "OK";
}
如果你想创建一个你可以通过 stockName
获取的实体,你需要类似
的东西
public String addNewStockName(String stockName) throws DelistedException {
Key key = KeyFactory.createKey("Stocks", stockName);
Entity stock = new Entity(key);
stock.setProperty("foo", "bar");
ds.put(stock);
return "OK";
}
然后您可以按原样使用您的 deleteStockName()
方法。这当然假设您的密钥名称是唯一的,但这也意味着您始终可以通过密钥而不是查询来获取 Stock
。
我有这样创建的实体:
public String addNewStockName(String newStock) throws DelistedException {
Entity stock = new Entity("Stocks");
stock.setProperty("Name", newStock);
ds.put(stock);
return "OK";
}
正在尝试像这样删除特定实体:
public String deleteStockName(String stockName){
Key key = KeyFactory.createKey("Stocks", stockName);
ds.delete(key);
return "OK";
}
并且它不会删除具有 属性 'stockName' 的实体。为什么?
您的 Stocks
实体有一个名为 "Name"
的 属性。这与 键名 .
您必须执行查询以获取与 "Name=?"
的过滤器相匹配的实体或实体键。
像这样:
public String deleteStockName(String stockName) {
DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
Filter f = new FilterPredicate("Name", FilterOperator.EQUAL, stockName);
Query q = new Query("Stocks").setFilter(f).setKeysOnly();
List<Entity> results = ds.prepare(q)
.asList(FetchOptions.Builder.withDefaults());
if (results.isEmpty())
return "Not Found!";
ds.delete(results.get(0).getKey());
return "OK";
}
如果你想创建一个你可以通过 stockName
获取的实体,你需要类似
public String addNewStockName(String stockName) throws DelistedException {
Key key = KeyFactory.createKey("Stocks", stockName);
Entity stock = new Entity(key);
stock.setProperty("foo", "bar");
ds.put(stock);
return "OK";
}
然后您可以按原样使用您的 deleteStockName()
方法。这当然假设您的密钥名称是唯一的,但这也意味着您始终可以通过密钥而不是查询来获取 Stock
。