0


Google appengine と jdo は初めてです。2 つのエンティティを使用して JDO でクエリを作成する方法がわかりません。以下のような UserProfile と UserFeed エンティティがあります。

@PersistenceCapable
public class UserProfile {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;

@Persistent
private String firstName;

@Persistent
private String lastName;

@Persistent
private List<Key> friendProfileKeys;
}

@PersistenceCapable
public class UserFeed {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;

@Persistent
private Key profileKey;

@Persistent
private String comment;   

@Persistent
private UserFeedType userFeedType;//Friends,Public
}

以下のクエリでは、ユーザーが投稿したフィードのリストを取得していました。

final Query query = pm.newQuery(UserFeed.class);
final List v;

query.setFilter("profileKey == paramUserProfileKey");
query.declareParameters("com.google.appengine.api.datastore.Key paramUserProfileKey");

v = (List) query.execute(profile.getKey());

ユーザーとその友人が投稿したフィードと公開投稿のリストを取得するのを手伝ってください。

4

1 に答える 1

1

@DataNucleus がコメントで述べたように、GAE Datastore は結合クエリをサポートしていないため、単一のクエリで取得したいすべてを取得することは不可能だと思います...

私が理解している限り、あなたには2つの選択肢があります:

最初の選択肢は、いくつかのクエリを使用することです。1 つのクエリはすべての公開投稿を要求し、次にユーザーのすべてのフィードを取得するために作成したような別のクエリ、すべての友人を取得するクエリ、最後に各友人に対して 1 つのクエリを使用して、彼らの投稿のために...

2番目の選択肢は、所有関係を使用することです。このように、タイプ Key のフィールド (主キーではなく「外部キー」!) を変更し、実際のクラスのフィールドを使用する必要があります。たとえば、次のようなフィールドが必要です。

@Persistent
private List<UserProfile> friendProfiles;

@Persistent
private UserProfile profile;

このように、GAE/J のドキュメントでも述べられているように、たとえば を取得すると、次を使用するだけUserFeedで関連付けられた を簡単に取得できます。User

retrievedUserFeed.getProfile();

また、次の方法で、取得したフィードの作成者の友人にアクセスすることもできます。

retrievedUserFeed.getProfile().getFriendProfiles();

これらの所有された関係には、詳細を説明することはできませんが (前のリンクを参照)、基本的に他のエンティティと所有された関係を持つエンティティを取得するときに、対応するフィールドに触れない場合、関連する動作があります。エンティティは取得されません。前の例では、 を取得してUserFeedもメソッドを使用しない場合、getProfile()UserProfileメモリにロードされることはないため、リソースを節約できます...

ちなみに、この方法を使用する場合は、次のような関係を持つことを強くお勧めしUserProfileますUserFeed

@Persistent
private List<UserFeed> ownedFeeds;

UserProfile反対方向だけでなく、 からへとナビゲートしたいからUserFeedです... (注: これは、GAE や JDO などの実装とは無関係の設計上の問題です)

于 2013-04-09T20:01:33.033 に答える