J'essaye de créer une base de données d'utilisateurs avec la connexion entre les utilisateurs (liste d'amis). Il y a 2 tables principales: UserEntity (champ principal id) et FriendEntity avec des champs: - initiatorId - id de l'utilisateur qui a initié l'amitié - friendId - id de l'utilisateur qui a été invité.Sous-requêtes sur Java GAE Datastore
Maintenant j'essaye d'aller chercher tous les amis d'un utilisateur particulier et j'ai rencontré quelques problèmes avec l'utilisation des sous-requêtes dans JDO ici.
Logiquement la requête doit être quelque chose comme ceci: SQL: SELECT * FROM UserEntity OÙ EXISTE (SELECT * FORMULAIRE FriendEntity OU (initiatorId == UserEntity.id & & friendID == userId) || (friendID == UserEntity. id & & initiatorId == userId))
ou SELECT * FROM WHERE UserEntity userId IN (SELECT * FROM FriendEntity OÙ initiatorId == UserEntity.id) OR userId IN (SELECT * FROM WHERE FriendEntity friendID == UserEntity.id) Donc, pour répliquer la dernière requête dans JDOQL, j'ai essayé de faire oici:
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);
En conséquence, j'obtiens l'erreur suivante: méthode non prise en charge alors que l'expression analyse syntaxique.
Quelqu'un peut-il aider avec cette requête s'il vous plaît?