java - 在嵌入式引用列表中对象化查询

标签 java google-app-engine google-cloud-datastore nosql

在我的数据存储中,我有一个帖子实体,它有一个发件人,这个发件人有一个位置列表。基本上,这看起来像这样:

@Entity
@Cache
@Unindex
@Searchable
public class Post {
    @Index
    @Load(WithSender.class)
    @NonNull @Getter @Setter
    protected Ref<User> sender;


    @Index
    @Getter
    protected long creation;
}

@Entity
@Cache
@Unindex
public class User {

    @Index
    @NotNull
    @Email
    @NonNull
    @Getter
    @Setter
    private String email;

    @Size(max = 50)
    @Getter
    @Setter
    private String firstName;

    @Size(max = 50)
    @Getter
    @Setter
    private String lastName;

    @Index
    @Setter
    @Getter
    protected List<Key<Region>> regions;
}

我想要做的是,能够查询属于该用户区域列表中某个区域的用户发送的所有帖子,并按创建顺序查询。

基本上,我尝试这样做:

query = query.filter("sender.regions", "key").order("-creation");

当我第一次执行查询时,AppEngine 要求我创建这个索引:

<datastore-index kind="Post" ancestor="false" source="manual">
    <property name="sender.regions" direction="asc"/>
    <property name="creation" direction="desc"/>
</datastore-index>

但结果仍然是无可救药的空...如果有人有建议,我会很高兴。谢谢!

最佳答案

为了通过“sender.regions”查询帖子,应该嵌入发件人实体。

数据存储中没有像“join”这样的 SQL。您可以将发件人嵌入到帖子中,或者先按地区查询发件人键,然后使用这些发件人键查询帖子。

希望对您有所帮助。

关于java - 在嵌入式引用列表中对象化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29152333/

相关文章:

python - Web/Screen Scraping with Google App Engine - 代码在 python 解释器中工作,但在 GAE 中不工作

java - 对象化实体 - 重用问题

google-app-engine - Go API 的 KEY_RESERVED_PROPERTY 等价物是什么?数据存储

java - 为什么 Java 运行时在 SSL 信任存储的工作方式以及我们如何处理它方面存在如此大的差异?

java - 在 junit 中运行 cucumber 时出错

google-app-engine - 对于 ndb.JsonProperty,值从一个实例泄漏到另一个实例

google-app-engine - 您将如何为 Twitter 这样的社交网站设计 AppEngine 数据存储?

java - 子接口(interface)指向父接口(interface)实现类

java - 在Java中将类似文件的字符串拆分为字符串

java - Android Studio 中未处理的异常 Class.forname ("com.google.cloud.sql.jdbc.Driver")