我正嘗試創建一個用戶數據庫(好友列表)。 有兩個主表:UserEntity(主字段ID)和FriendEntity字段: - initiatorId - 發起友誼的用戶的ID - friendId - 已被邀請的用戶的ID。Java GAE Datastore上的子查詢
現在我試圖抓取一個特定用戶的所有朋友,並遇到在JDO中使用子查詢時遇到的一些問題。
在邏輯上,查詢應該是這樣的: SQL:SELECT * FROM UserEntity WHERE EXISTS(SELECT * FORM FriendEntity WHERE(initiatorId == UserEntity.id & & friendId ==用戶id)||(friendId == UserEntity。 ID & & initiatorId ==用戶id))
或SELECT * FROM UserEntity其中userid IN(SELECT * FROM FriendEntity WHERE == initiatorId UserEntity.id)OR用戶id IN(SELECT * FROM FriendEntity WHERE == 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);
在結果我得到以下錯誤:不支持 方法在解析表達式。
任何人都可以幫助這個查詢嗎?