Appengine java получает сущность на основе ключа и условий

66
4

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


В моем сценарии у Тренера есть много разных отношений с пользователем, поэтому у меня есть моя структура как таковая


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(), поэтому код вверху просто вернет мне пустое Entity.


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

спросил(а) 2010-10-03T07:06:00+04:00 9 лет, 9 месяцев назад
1
Решение
78

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


activated_users_for_trainer = User.all().filter("trainer =", trainer_key).filter("is_actived =", True).fetch(100)

ответил(а) 2010-10-04T02:20:00+04:00 9 лет, 9 месяцев назад
39

Его более легкий и оптимальный я думаю, что получить объект по id, а затем, если существует, проверить, is_activated, в хранилище быстрее и дешевле получить по ID сущность, следующая проверка выполняется только по памяти. Как в этом ответе

ответил(а) 2016-06-02T12:14:00+03:00 4 года, 1 месяц назад
39

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


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


поэтому для фильтрации по клавише


query.addFilter(Entity.KEY_RESERVED_PROPERTY, FilterOperator.EQUAL, myKey);

ответил(а) 2012-05-06T07:55:00+04:00 8 лет, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема