2010-04-20 23 views
1

我正嘗試創建一個用戶數據庫(好友列表)。 有兩個主表: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); 

在結果我得到以下錯誤:不支持 方法在解析表達式。

任何人都可以幫助這個查詢嗎?

回答