我正在尝试创建一个用户与用户之间的连接的数据库(朋友列表)。
有2个主表:UserEntity(主字段ID)和带有字段的FriendEntity:
 -creatorId-发起友谊的用户的ID
 -friendId-被邀请的用户的ID。

现在,我试图获取一个特定用户的所有朋友,并在此处在JDO中使用子查询遇到了一些问题。

逻辑上,查询应该是这样的:
SQL:SELECT *从UserEntity存在的位置(SELECT *形式FriendEntity WHERE(initiatorId == UserEntity.id && friendId == userId)||(friendId == UserEntity.id && InitiatorId == userId))

或SELECT * FROM UserEntity WHERE userId IN(选择* FROM FriendEntity WHERE启动器ID == UserEntity.id)或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);


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

有人可以帮忙这个查询吗?

最佳答案

您正在尝试进行联接-您不能跨实体进行联接。

这是一个在拥有关系的情况下进行简单联接的示例
http://gae-java-persistence.blogspot.com/2010/03/executing-simple-joins-across-owned.html

还要看看该网站,它有很多关于使持久性工作正常工作的非常好的信息。以及加入的一些变通方法。

您可以在实体之间建立关系,有关此信息,请参阅GAE文档。

关于java - Java GAE数据存储区上的子查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2676194/

10-10 11:49