2010-04-20 84 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); 

在结果我得到以下错误:不支持 方法在解析表达式。

任何人都可以帮助这个查询吗?

回答