Подзапросы на Java GAE Datastore - PullRequest
       29

Подзапросы на Java GAE Datastore

1 голос
/ 20 апреля 2010

Я пытаюсь создать базу данных пользователей со связью между пользователями (список друзей). Есть две основные таблицы: UserEntity (идентификатор основного поля) и FriendEntity с полями: - initiatorId - идентификатор пользователя, который инициировал дружбу - friendId - идентификатор приглашенного пользователя.

Теперь я пытаюсь собрать всех друзей одного конкретного пользователя и столкнулся с некоторыми проблемами при использовании подзапросов в JDO.

Логически запрос должен выглядеть примерно так: SQL: SELECT * FROM UserEntity, ГДЕ ЕСТЬ

или SELECT * FROM UserEntity, ГДЕ пользовательский идентификатор (SELECT * FROM FriendEntity, ГДЕ initiatorId == UserEntity.id) ИЛИ ID пользователя IN (SELECT * FROM FriendEntity, ГДЕ friendId == UserEntity.id)

Итак, чтобы повторить последний запрос в JDOQL, я попытался сделать следующее:

Query friendQuery = pm.newQuery(FriendEntity.class);
friendQuery.setFilter("initiatorId == uidParam");
friendQuery.setResult("friendId");

Query initiatorQuery = pm.newQuery(FriendEntity.class);
initiatorQuery.setFilter("friendId == uidParam");
initiatorQuery.setResult("initiatorId");


Query query = pm.newQuery(UserEntity.class);
query.setFilter("initiatorQuery.contains(id) || friendQuery.contains(id)");
query.addSubquery(initiatorQuery, "List initiatorQuery", null, "String uidParam");
query.addSubquery(friendQuery, "List friendQuery", null, "String uidParam");
query.declareParameters("String uidParam");

List<UserEntity> friends = (List<UserEntity>) query.execute(userId);

В результате я получаю следующую ошибку: Неподдерживаемый метод при разборе выражения.

Может ли кто-нибудь помочь с этим запросом, пожалуйста?

1 Ответ

1 голос
/ 20 апреля 2010

Вы пытаетесь выполнить объединение - вы не можете выполнять объединение между сущностями.

Вот пример выполнения простого соединения, если есть отношения с владельцем http://gae -java-persistence.blogspot.com / 2010/03 / исполняющие-простодушный присоединяется к-через-owned.html

Также посмотрите на этот веб-сайт, на котором есть много действительно полезной информации о том, как заставить постоянные вещи работать. а также пару обходных путей для соединений.

Вы можете установить отношения между сущностями, см. Документацию GAE.

...