Objectify删除似乎不起作用

时间:2014-05-15 14:56:51

标签: google-app-engine google-cloud-endpoints objectify

我正在尝试使用objectify从我的数据存储区中删除实体,但即使在关闭实例并重新启动它之后似乎也没有删除。这就是实体在数据存储区中的样子(无论是在生产服务器和开发服务器上):

enter image description here

这是我用来尝试删除它的代码:

@ApiMethod(name = "deleteDataVersion")
public Result deleteDataVersion(@Named("id") String id) {

    // Where id is the id of the entity in the datastore.

    if (id != null && !id.equals("")) {
        ofy().delete().type(DataVersion.class).id(id).now();
        return new Result(Result.STATUS_SUCCESS);
    } else
        return new Result(Result.STATUS_FAILED);
}

我也试过这段代码:

@ApiMethod(name = "deleteDataVersion")
public Result deleteDataVersion(@Named("id") String id) {

    if (id != null && !id.equals("")) {

        // DataVersion doesn't have a parent.
        Key<DataVersion> key = Key.create(null, DataVersion.class, id);

        ofy().delete().key(key).now();
        return new Result(Result.STATUS_SUCCESS);
    } else
        return new Result(Result.STATUS_FAILED);
}

但实体永远不会被删除。这是我的实体的代码:

@Entity
public class DataVersion {

    @Id
    private Long id;
    String folderName;
    @Index
    String effective;

    public DataVersion() {
    }

    public DataVersion(String folderName, String effective ) {
        this.folderName= folderName;
        this.effective = effective;
    }

    // Getters & setters..
}

我似乎无法找到问题所在:(任何帮助都会非常感激!我确定这是我忽视的一些小问题(相当新的Objectify / AppEngine)。

2 个答案:

答案 0 :(得分:5)

Endpoint中参数中的ID是一个String,您尝试删除ID为Long的对象DataVersion。

ofy().delete().type(DataVersion.class).id(Long.valueOf(id)).now();

会更好用!

答案 1 :(得分:0)

首先拿到钥匙    Key<DataVersion> key = Key.create(null, DataVersion.class, id);

然后使用密钥从数据库中获取实体       DataVersion dataVersion = ofy().load().key(key).now();

然后使用objectify删除实体      ofy().delete().entity(dataVersion).now();