2012-10-11 25 views
3

我需要做getKey()用這種實體:獲取實體鍵與客體4

@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

您不能使用null或0 id創建密鑰。 Objectify和數據存儲都不會允許它。

如果要從實體創建密鑰,請確保它首先具有有效的ID。

+0

我試圖堅持一個KeyValueVersion實體與'孩子'實體的鍵,值和版本... – xybrek

+0

也正如我所想,@Id是一個龍是自動生成的? – xybrek

+0

然而,實體'價值'是一個'孩子'實體,似乎'孩子'實體不會自動生成Id字段,如果是這樣,我怎樣才能爲子實體生成唯一的ID? – xybrek

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); 
} 
+0

另外一個重要的知識點是Objectify只保留字段,而不是bean屬性。這就是@Ignore不適用於方法的原因。 – stickfigure

+0

@stickfigure好的我明白。但是,我仍然得到NPE,我該如何處理? – xybrek

+0

@thanos無論如何,爲什麼getKey()方法仍然拋出NPE? – xybrek