1

App Engine を介して単純な to-do API サービスを作成しようとしています。Userデータ オブジェクトのセットを持つデータ オブジェクトがProjectあり、これらのProjectデータ オブジェクトにはオブジェクトのセットがありTaskます。次のコードは、それらの実装と関係についてのアイデアを提供するはずです。

@PersistenceCapable(detachable = "true")
public class User implements Serializable {
 @PrimaryKey
 @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
 private Long id;

 @Persistent(mappedBy = "user")
 private List<Project> projects;
}


@PersistenceCapable(detachable = "true")
public class Project implements Serializable {
 @PrimaryKey
 @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
 private Key id;

 @Persistent
 private User user;

 @Persistent(mappedBy = "project")
 private List<Task> tasks;
}


@PersistenceCapable(detachable = "true")
public class Task implements Serializable {
 @PrimaryKey
 @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
 private Key id;

 @Persistent
 private Project project;
}

私が User データ オブジェクトで行っていることは次のとおりです ( EntityManagerApp Engine のヘルプ ページに表示されているように定義されています)。

EntityManager em = EMFService.get().createEntityManager();
try {
 User dev = em.find(User.class, id);
 em.remove(dev);
} finally {
 em.close();
}

私がやりたいことは、オブジェクトを参照する親とのキーの組み合わせではなく、データオブジェクトに対応する長い数値であるID /キーでデータオブジェクトProjectを取得することです。Taskこれらのオブジェクトは他のオブジェクトの子であるため、id 値でそれらを取得する方法がわかりませんでした。

4

1 に答える 1

0

GAE は以下をサポートしていません:

多対多の関係を所有していました。

「結合」クエリ。親の種類に対してクエリを実行する場合、フィルターで子エンティティのフィールドを使用することはできません。キーを使用して、クエリで親の関係フィールドを直接テストできることに注意してください。

そのため、オブジェクト モデルを変更して、プロジェクト リストのユーザー オブジェクトで直接長い ID を使用し、タスクリストとユーザーのプロジェクト オブジェクトで直接使用することをお勧めします。

または、 datastore api を直接使用することをお勧めします。これは、データがどのように保存されているか、どのように取得できるかがわかるため 、 GAE 用にデータを設計するためです。データストア API を使用すると、Ancestor Pathsを使用できます

于 2012-12-04T17:32:43.293 に答える