简体   繁体   English

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

[英]Trouble deleting entity with specific property set in Java GAE

I have the entities created like this: 我有这样创建的实体:

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

Trying delete the specific entity like this: 尝试像这样删除特定实体:

public String deleteStockName(String stockName){
    Key key = KeyFactory.createKey("Stocks", stockName);
    ds.delete(key);
    return "OK";
}

And it does not delete the entity which has property 'stockName'. 并且它不会删除具有属性“ stockName”的实体。 Why? 为什么?

If you want to create an entity that you can fetch by stockName , you need something like 如果您想创建一个可以通过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";
}

You can then use your deleteStockName() method as is. 然后,您可以按deleteStockName()使用deleteStockName()方法。 This of course assumes your key name is unique, but it also means you can always fetch the Stock by key, rather than query. 当然,这假设您的键名是唯一的,但这也意味着您始终可以通过键而不是查询来获取Stock

Your Stocks entity has a property named "Name" . 您的Stocks实体具有一个名为"Name"的属性。 That is not the same as the key name . 这与键名不同

You have to perform a query to get the entities or entity keys matching the filter of "Name=?" 您必须执行查询以获取与"Name=?"过滤器匹配的实体或实体键"Name=?" .

Something like this: 像这样:

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