1

ユーザー間のつながりを持つユーザーのデータベース(友達リスト)を作成しようとしています。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 && initialId == userId ))

またはSELECT*FROM UserEntity WHERE userId IN(SELECT * FROM FriendEntity WHERE InitiativeId == 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);

その結果、次のエラーが発生します。式の解析中にサポートされていないメソッド。

誰かがこのクエリを手伝ってもらえますか?

4

1 に答える 1

1

参加しようとしています-エンティティ間で参加することはできません。

所有関係がある場合に単純な結合を行う例を次に示し ますhttp://gae-java-persistence.blogspot.com/2010/03/executing-simple-joins-across-owned.html

また、そのWebサイトを見ると、永続性を機能させるための非常に優れた情報がたくさんあります。また、結合のいくつかの回避策もあります。

エンティティ間の関係を設定できます。そのためには、GAEドキュメントを参照してください。

于 2010-04-20T15:08:31.307 に答える