0

У меня есть 3 объекта, которые имеют что-то общее.Запрос различных EntitySubclasses в одном запросе

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

ответ

2

Собственно, с Objectify я думаю, что вы можете. Здесь они дают пример:

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

Я думаю, что хранилищу не может сделать это изначально, но объективизации настроят структуру для вас, что позволяет полиморфизм в любом случае.

+0

Я маневрировал, чтобы заставить его работать. Это точно так же, как я думал в этом вопросе. Однако забудьте о просмотре ваших объектов на облачной консоли Google, поскольку все сущности будут находиться под BaseEntity, и таблица объединяет все поля ... это не так читаемо –

2

Другой ответ не совсем корректен. С помощью Objectify вы можете запрашивать запрос по типу суперкласса, и он будет без проблем запрашивать все применимые объекты хранилища данных, которые соответствуют наследующим аннотированным классам @Entity.

+0

Да, я собирался опубликовать то же самое. Хотя это невозможно при использовании API Datastore низкого уровня, Objectify обеспечивает поддержку такого наследования (путем хранения метаданных в свойствах '^ i' и'^d'). Мы используем именно такой запрос в течение некоторого времени. – tx802

Смежные вопросы