Я пытаюсь создать базу данных пользователей с соединением между пользователями (список друзей). Есть 2 основные таблицы: UserEntity (идентификатор основного поля) и FriendEntity с полями: - initiatorId - идентификатор пользователя, который инициировал дружбу - friendId - идентификатор пользователя, который был приглашен.Подзапросы на Java GAE Datastore
Теперь я пытаюсь найти всех друзей одного конкретного пользователя и столкнулся с некоторыми проблемами с использованием подзапросов в JDO здесь.
Логически запрос должен быть чем-то вроде этого: SQL: SELECT * FROM UserEntity ГДЕ СУЩЕСТВУЕТ (SELECT * FORM FriendEntity WHERE (initiatorId == UserEntity.id & & friendId == USERID) || (friendId == UserEntity. ID & & initiatorId == идентификатор пользователя))
или SELECT * FROM UserEntity Где идентификатор пользователя IN (SELECT * FROM FriendEntity ГДЕ initiatorId == UserEntity.id) или идентификатор_пользователя IN (SELECT * FROM FriendEntity ГДЕ friendId == UserEntity.id)
Чтобы воспроизвести последний запрос в JDOQL, я попытался сделать t он следующее:
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);
В результате я получаю следующее сообщение об ошибке: неподдерживаемый метод при разборе выражения.
Не могли бы вы помочь с этим вопросом, пожалуйста?