Java 带有Objectify、parent和children的查询

Java 带有Objectify、parent和children的查询,java,google-app-engine,google-cloud-datastore,objectify,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 @

我想知道我是否可以在同一个问题中向一位班主任和他的儿子提出一个问题

@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?

}
@实体
公共类博客{
@吸气剂
@塞特
@身份证
字符串id;
@吸气剂
@塞特
国际知名度;
}
@实体
公营职位{
@身份证
@吸气剂
@塞特
字符串id;
@吸气剂
@塞特
字符串标题;
@吸气剂
@塞特
长期出版;
@吸气剂
@塞特
字符串区域设置;
@吸气剂
@塞特
@装载
private Ref parent;//还是@parent?
}
这是可能的?->

查询列表类型Post>过滤区域设置“Post”>订单发布“Post”>订单流行度“博客”


谢谢。

不,你不能。这将是一个联接,而app engine不支持查询中的联接。您需要将要筛选的数据复制到Post实体上,或者执行两个单独的查询并在内存中进行设置交集。

如果将Post中的Ref字段设置为@Parent字段,则可以在博客上进行祖先()查询并获取所有内容(祖先()包括父实体)。但是,除非您按类型(即Post)进行筛选,否则您将获得该实体组中的所有内容


这种微观优化几乎毫无意义。它不会为您节省任何金钱,也不可能为您节省任何明显的延迟,尤其是如果您@Cache博客。

当然可以!为此,请将“人气”字段添加到Post。如果博客的流行度发生变化,你必须每天或每周更新该值

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


@阿德文,你不能说不!如果您不知道

,我特别声明,执行此操作的唯一方法是将要筛选的数据复制到Post对象上。这不是一个连接,它与问题所问的根本不同。