Appengine java получение сущности на основе ключа и условий - PullRequest
2 голосов
/ 03 октября 2010

Я изучаю appengine (java), и в зависимости от предмета, как мне, используя DatastoreService, получить Entity, основанный на ключе и условиях?

В моем сценарии у Trainer много-много связейПользовательский, так что моя структура выглядит так:

Trainer(id, name, type, department)
User(id, name, address, is_activated)
TrainerUser(id, trainer_id, user_id)

Теперь, чтобы получить всех пользователей под конкретным тренером, я бы получил все user_id из фильтрации TrainerUser по trainer_id.Все окейЗатем я хочу получить всех активированных пользователей под трейнером, поэтому я планирую перебрать извлеченные user_id и вызвать что-то вроде

Query q = new Entity('User');
q.addFilter('Key', EQUAL, userId);
q.addFilter('is_activated', EQUAL, True);

Но, насколько я знаю, Key не является реальным физическим свойством вдоступ к которому вы можете получить с помощью addFilter (), поэтому код сверху просто вернет мне пустую сущность.

Есть ли способ ссылки на ключ в сущности?Любое волшебное ключевое слово для этого?

Ответы [ 3 ]

0 голосов
/ 06 мая 2012

Entity.KEY_RESERVED_PROPERTY - это имя свойства, которое вы можете использовать для ключей.

Зарезервированное имя свойства, используемое для ссылки на ключ сущности.Эта строка может быть использована для фильтрации и сортировки по самому ключу сущности.

, поэтому для фильтрации по ключу

query.addFilter(Entity.KEY_RESERVED_PROPERTY, FilterOperator.EQUAL, myKey);
0 голосов
/ 02 июня 2016

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

0 голосов
/ 04 октября 2010

Почему бы не отфильтровать по тренеру и is_activation? Вот Python-подобный псевдокод:

activated_users_for_trainer = User.all().filter("trainer =", trainer_key).filter("is_actived =", True).fetch(100)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...