Я пытаюсь создать базу данных пользователей со связью между пользователями (список друзей).
Есть две основные таблицы: 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);
В результате я получаю следующую ошибку:
Неподдерживаемый метод при разборе выражения.
Может ли кто-нибудь помочь с этим запросом, пожалуйста?