【问题标题】:Subqueries on Java GAE DatastoreJava GAE 数据存储上的子查询
【发布时间】:2011-02-10 04:43:17
【问题描述】:

我正在尝试创建一个用户数据库,并在用户之间建立连接(朋友列表)。 有 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);

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

谁能帮忙解答一下这个问题?

【问题讨论】:

    标签: java google-app-engine jdo jdoql


    【解决方案1】:

    您正在尝试进行连接 - 您无法跨实体进行连接。

    如果存在拥有关系,以下是执行简单联接的示例 http://gae-java-persistence.blogspot.com/2010/03/executing-simple-joins-across-owned.html

    另外看看那个网站,它有很多关于让持久性工作正常工作的非常好的信息。以及一些连接的变通方法。

    您可以设置实体之间的关系,请参阅 GAE 文档。

    【讨论】:

      猜你喜欢
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 2018-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多