我正在尝试创建一个具有用户之间连接的用户数据库(朋友列表)。有 2 个主表:UserEntity(主要字段 id)和 FriendEntity 字段:-initiatorId-发起友谊的用户的 id-friendId-被邀请的用户的 id。
现在我正在尝试获取一个特定用户的所有朋友,并在此处遇到了在 JDO 中使用子查询的一些问题。
逻辑上查询应该是这样的: SQL: SELECT * FROM UserEntity WHERE EXISTS (SELECT * FORM FriendEntity WHERE (initiatorId == UserEntity.id && friendId == userId) || (friendId == UserEntity.id &&initiatorId == userId ))
或 SELECT * FROM UserEntity WHERE userId IN (SELECT * FROM FriendEntity WHEREinitiatorId == UserEntity.id) OR userId IN (SELECT * FROM FriendEntity WHERE 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);
结果我得到以下错误:解析表达式时不支持的方法。
有人可以帮忙解决这个问题吗?