无法删除具有Java GAE中设置的特定属性的实体

时间:2015-06-03 14:41:25

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

我有像这样创建的实体:

-webkit-filter: opacity(.9999);
-webkit-text-stroke: 0.35px;

尝试删除这样的特定实体:

public String addNewStockName(String newStock) throws DelistedException {
    Entity stock = new Entity("Stocks");
    stock.setProperty("Name", newStock);
    ds.put(stock);
    return "OK";
}

并且它不会删除具有属性'stockName'的实体。为什么呢?

2 个答案:

答案 0 :(得分:2)

如果您想创建一个可以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,而不是查询。

答案 1 :(得分:0)

您的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";
}