用Objectify获取实体密钥4

时间:2012-10-11 01:28:20

标签: google-app-engine objectify

我需要使用这种实体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密钥的模式是什么?

2 个答案:

答案 0 :(得分:2)

您无法创建null或0 id的Key。 Objectify和数据存储都不会允许它。

如果要从实体创建密钥,请确保它首先具有有效的ID。

答案 1 :(得分: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); 
}