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