【问题标题】:@Embedded &@Id questions@Embedded &@Id 问题
【发布时间】:2012-05-14 19:16:07
【问题描述】:

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

谢谢和欢呼。

【问题讨论】:

  • 您是否打算在 Uid 类中有两个 @Id 注释?如果是这样,那是不正确的......每个类只有一个字段可以保存身份。
  • 对错误的额外 @Id 字段表示抱歉。没错,我只打算在 Uid 中使用一个 @Id 字段。

标签: google-app-engine objectify


【解决方案1】:

1) 是的

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

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

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

【讨论】:

    【解决方案2】:

    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

    另一种选择是在 Message 中使用 Key<Uid> 之类的东西,但这取决于你用它做什么。

    【讨论】:

    • 你在 #2 上错了。而objectify与jdo完全没有关系。如果您正在使用 objectify,那么忘记您对 jdo 的所有了解会很有帮助(但要了解有关 big table 的所有知识)。
    • 我认为问题是是否允许嵌入一个带有 \@Id 字段的类。我对 Objectify 3.1 的快速测试表明,是的,嵌入式类可以有一个用 \@Id 标记的字段,尽管该字段在封闭实体中没有做任何特殊的事情。试试看。 Rick,也许你是对的,我不应该提到 GAE/JDO,但另一方面,我认为 Google 文档比 Objectify 文档更好地解释了它的目的。
    • 你可以用你想要的任何东西来注释一个字段,但这并不意味着这样做是正确的......如果你认为它会让它成为键的一部分,那就错了,这是注释的目的。
    • 感谢您的所有 cmets。杰弗里,我同意你关于 Key 的观点,这是我想到的更好的替代方案,但在我的情况下,用 Uid 的哈希或可以唯一的东西替换它更有意义访问数据存储中的 Uid 实体。
    • @pbhowmick:实际上,我认为密钥可能会满足您的需求......您可以使用密钥快速/廉价地从数据存储中检索特定的 Uid。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 2021-12-02
    • 2015-11-28
    • 2015-06-01
    • 2019-10-19
    • 1970-01-01
    相关资源
    最近更新 更多