2012-05-14 79 views
0

我是新來的物化和我有最好的代碼@Embedded&@標識問題

public class Uid { 
@Id private String name; // e-mail id 
    private String oauth2_token; // A token 
... // constructors/setters/getters 
}; 

public class Message { 
@Id Long msg_id; 
private String message; 
@Embedded private Uid uid; 
... // constructors/setters/getters 
}; 
  1. 所示的字段可以私人,如果我打算讓他們能夠堅持一些疑惑?
  2. 的Uid具有場標記@Id,然後的Uid@Embedded成類消息其中有一個單獨的@Id字段(儘管不同類型的。此允許在所有與如果是的話,是否有注意事項/異常?

THX和歡呼聲。

+0

您是否打算在Uid類中有兩個@Id註釋?如果是這樣,那是不正確的......只有一個字段可以保持每個類的身份。 –

+0

對不起,錯誤的額外** @ Id **字段。對了,我只是打算在** Uid **中的一個** @ Id **字段。 – pbhowmick

回答

-1

1)是的,私人領域將持續。我建議使用@Indexed,@NotIndexed或@NotSaved註釋所有字段。

2)我認爲它是可以的......至少,我認爲它可以在Objectify中使用,但是您應該明確地考慮它是​​否意味着您認爲它的含義。也許你打算將一些Uid作爲正常的獨立實體,但有些嵌入在消息中?請參閱: http://code.google.com/p/objectify-appengine/wiki/IntroductionToObjectify#@Embedded

GAE Java/JDO文檔還討論了嵌入類。它是在JDO有一點不同,但也許是有益的背景材料: https://developers.google.com/appengine/docs/java/datastore/jdo/dataclasses#Embedded_Classes

另一種選擇是在信息使用類似Key<Uid>,而不是,但它取決於你用它做什麼。

+0

你錯了#2。客觀化與jdo完全沒有關係。如果你使用物化,忘記你所知道的關於jdo的一切是有幫助的(但是你可以學習關於大桌子的所有知識)。 –

+0

我認爲問題在於是否允許嵌入類中帶有\ @Id字段。我用Objectify 3.1進行的快速測試表明,嵌入類可以有一個用@ @Id標記的字段,儘管該字段在封閉實體中沒有做任何特殊的處理。試試看看。瑞克,或許你是對的,我不應該提到GAE/JDO,但另一方面,我認爲Google文檔更好地解釋了Objectify文檔的目的。 –

+0

你可以用任何你想要的東西來註釋一個字段,但是這樣做並不是正確的做法......如果你認爲它會使它成爲關鍵字的一部分,這就是註釋的目的,這是錯誤的。 –

1

1)是

2)否,嵌入式類沒有在客觀化的@Id。您應該在這裏閱讀文檔:http://code.google.com/p/objectify-appengine/wiki/IntroductionToObjectify#@Embedded

嵌入實際上將您的嵌入類扁平化爲與封閉對象相同的表。 appengine中的id非常具體,它用於創建數據存儲區密鑰。在實際上並不代表數據存儲中的實體的類上有一個Id是沒有意義的。

對象化嵌入對象的想法是,你想把它們當作java世界中的單獨對象,但是爲了你想查詢它們的性能目的。這種方式解決了bigtable中缺少連接的問題(無論如何都有一些用例)。您可以查詢與它們相關的屬性。