3

我需要getKey()处理这种实体:

@Entity
public class Value {
    @Id
    private long id;
    private byte[] value;

    com.googlecode.objectify.Key<Value> getKey() {
        return com.googlecode.objectify.Key.create(Value.class, id); // When executed this line throws NullPointerException
    }

        // Code omitted
}

然而,我之前在版本 3 中使用的模式似乎不再适用。被@Transient替换为但是当我用我的函数@Ignore注释我得到这个错误:getKey()@Ignore

The annotation `@Ignore` is disallowed for this location 

所以我只是把它注释掉了。看看它是否会起作用。

此外,

当我运行我的应用程序时,函数会按照上面的注释getKey()抛出。NullPointerException

那么,获取@Entity密钥的模式是什么?

4

2 回答 2

2

您不能创建具有 null 或 0 id 的密钥。Objectify 和数据存储都不允许这样做。

如果你想从一个实体创建一个 Key,首先要确保它有一个有效的 id。

于 2012-10-11T21:13:55.290 回答
0

注释 @Ignore 仅针对实体的字段,以声明这些字段不会存储在数据存储中。由于 getKey() 是一种方法,因此不应在其上使用 @Ignore 注释。

有关 @Ignore 注释的更多信息,请查看: http ://objectify-appengine.googlecode.com/git/javadoc/index.html

希望这可以帮助!

更新:

对于 NPE,不确定是什么问题。你可以尝试用这个替换你的方法,看看它是否有效。

com.googlecode.objectify.Key<Value> getKey() {
    return new com.googlecode.objectify.Key<Value>(Value.class, id); 
}
于 2012-10-11T05:52:25.990 回答