使用Objectify,父母和孩子进行查询

时间:2014-04-28 13:43:21

标签: java google-app-engine google-cloud-datastore objectify

我想知道我是否可以在同一个查询中向类父亲和他的儿子进行查询。

@Entity
public class Blog {
    @Getter
    @Setter
    @Id
    String id;

    @Getter
    @Setter
    int popularity;
}

@Entity
public class Post {
    @Id
    @Getter
    @Setter
    String id;

    @Getter
    @Setter
    String title;

    @Getter
    @Setter
    long published;

    @Getter
    @Setter
    String locale;

    @Getter
    @Setter
    @Load
    private Ref<Blog> parent; // or @Parent?

}

这可能吗? - &GT;

查询列表类型发布&gt;过滤语言环境“发布”&gt;订单发布“发布”&gt; 订单人气“博客”

感谢。

3 个答案:

答案 0 :(得分:2)

不,你不能。这将是一个连接,并且应用引擎不支持查询中的连接。您需要将要过滤的数据复制到Post实体上,或者执行2个单独的查询并在内存中执行集合交集。

答案 1 :(得分:0)

如果你在Post中创建一个@Parent字段的Ref字段,你可以在Blog上做一个ancestor()查询并获取所有内容(ancestor()包含父实体)。但是,除非按类型过滤,否则您将获得该实体组中的所有内容。

这种微优化几乎肯定毫无意义。它不会为您节省任何金钱,并且不太可能为您节省任何明显的延迟,特别是如果您@Cache博客。

答案 2 :(得分:-1)

当然可以!通过将流行度字段添加到Post来完成此操作。如果博客的受欢迎程度发生变化,您必须每天或每周更新该值。

这种信息的重复是典型的,在noSql数据库中非常常见,不要认为merise:总是想:&#34;让所有数据准备好阅读的方法(以最小的请求数计)&# 34;,同步数据更新在noSql dbs loke cassandra或datastore中非常常见。尝试阅读有关该主题的一些文档

@adevine你不能说不!如果你不知道