我有这样创建的实体:

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

关于java - 无法删除在Java GAE中设置了特定属性的实体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30623312/

10-11 10:31