0

我是 Objectify 的新手,我有一些疑问,这在代码中得到了最好的说明

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到类Message中,它有一个单独的@Id字段(尽管类型不同。这完全允许吗?如果是,那么是否有警告/例外情况?

谢谢和欢呼。

4

2 回答 2

1

1) 是的

2) 不,嵌入式类在 objectify 中没有 @Id。您应该在此处阅读文档:http ://code.google.com/p/objectify-appengine/wiki/IntroductionToObjectify#@Embedded

嵌入实际上将您的嵌入类扁平化到与封闭对象相同的表中。appengine 中的 id 非常具体,用于创建数据存储区密钥。在一个实际上并不代表数据存储中的实体的类上使用 Id 是没有意义的。

objectify 中嵌入对象的想法是,您希望将它们视为 Java 世界中的单独对象,但出于性能目的,您希望对它们进行查询。这种解决了 bigtable 中缺少连接的问题(无论如何,对于一些用例)。您可以查询与封闭类相关的属性。

于 2012-05-15T02:50:51.663 回答
-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>在 Message 中的东西,但这取决于你用它做什么。

于 2012-05-14T20:59:29.913 回答