【问题标题】:Querying different EntitySubclasses in one query在一个查询中查询不同的 EntitySubclass
【发布时间】:2014-11-18 11:12:22
【问题描述】:

我有 3 个有共同点的实体。

@Entity
public class BaseEntity {
    Date updatedAt;
}

@EntitySubclass
public class A extends BaseEntity {
    String someData;
}

@EntitySubclass
public class B extends BaseEntity {
    int someData;
}

@EntitySubclass
public class C extends BaseEntity {
    boolean someData;
}

我可以通过一个查询来创建List<BaseEntity>Query<BaseEntity>吗?

大概是这样的吧?

ofy().load().type(User.class).filter("updatedAt > ", someDate)

【问题讨论】:

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


    【解决方案1】:

    实际上,我认为使用 Objectify 可以。这里他们举了一个例子:

    https://code.google.com/p/objectify-appengine/wiki/Entities#Polymorphism

    我认为数据存储本身无法做到这一点,但 Objectify 会为您设置一个允许多态性的结构。

    【讨论】:

    • 我已经设法让它工作了。这和我在问题中想的完全一样。但是,忘记在 Google 云控制台上查看您的实体,因为所有实体都将位于 BaseEntity 下,并且该表连接了所有字段......它不再那么可读了
    【解决方案2】:

    另一个答案并不完全正确。使用Objectify,您可以按种类查询超类,它将无缝查询与继承@Entity 注释类匹配的所有适用数据存储实体。

    【讨论】:

    • 是的,我正要发布同样的内容。虽然低级 Datastore API 无法实现,但 Objectify 提供了对这种继承的支持(通过将元数据存储在 ^i^d 属性中)。我们使用这种查询已经有一段时间了。
    猜你喜欢
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多