我刚开始物化,我有一些疑问,最好用代码来说明。
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
};如果我打算让字段是persisted?
E 113@EmbeddedE 214进入类E 115消息E 216,其中有一个单独的E 117@IdE 218字段(尽管类型不同)。这是允许的吗?如果允许,那么是否存在caveats/exceptions??
然后干杯。
发布于 2012-05-15 02:50:51
1)是
2)不,嵌入类在objectify中没有@Id。您应该在这里阅读文档:http://code.google.com/p/objectify-appengine/wiki/IntroductionToObjectify#@Embedded
实际上,嵌入会将嵌入的类平放到与包围对象相同的表中。appengine中的id非常具体,它用于创建数据存储密钥。在不实际表示数据存储中的实体的类上设置Id是没有意义的。
在objectify中嵌入对象的思想是,您希望在java世界中将它们视为单独的对象,但为了性能目的,您希望对它们进行查询。这种类型克服了bigtable中缺少联接的问题(至少对于一些用例而言)。您可以查询它们与封闭类相关的属性。
发布于 2012-05-14 20:59:29
( 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>的东西,但这取决于您使用它的方式。
https://stackoverflow.com/questions/10589672
复制相似问题