繁体   English   中英

无法删除在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”的实体。 为什么?

如果您想创建一个可以通过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()使用deleteStockName()方法。 当然,这假设您的键名是唯一的,但这也意味着您始终可以通过键而不是查询来获取Stock

您的Stocks实体具有一个名为"Name"的属性。 这与键名不同

您必须执行查询以获取与"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";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM