首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Embedded &@Id问题

@Embedded &@Id问题
EN

Stack Overflow用户
提问于 2012-05-14 19:16:07
回答 2查看 717关注 0票数 0

我刚开始物化,我有一些疑问,最好用代码来说明。

代码语言:javascript
复制
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?

  • class @Id,则
  1. 可以是专用的字段,那么UidE 212是E 113@EmbeddedE 214进入类E 115消息E 216,其中有一个单独的E 117@IdE 218字段(尽管类型不同)。这是允许的吗?如果允许,那么是否存在caveats/exceptions?

然后干杯。

EN

回答 2

Stack Overflow用户

发布于 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中缺少联接的问题(至少对于一些用例而言)。您可以查询它们与封闭类相关的属性。

票数 1
EN

Stack Overflow用户

发布于 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>的东西,但这取决于您使用它的方式。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10589672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档