我正在尝试通过App Engine创建一个简单的待办事项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;
}
我正在使用的用户数据对象如下(EntityManager
已定义,因为它显示在App Engine帮助页面上):
EntityManager em = EMFService.get().createEntityManager();
try {
User dev = em.find(User.class, id);
em.remove(dev);
} finally {
em.close();
}
我想要做的是通过id / Key获取Project
和Task
个数据对象,这是一个与数据对象相对应的长数字,而不是与其引用的父组合的键组合也是对象。由于这些对象是其他人的孩子,我无法弄清楚如何通过他们的id值来获取它们。
答案 0 :(得分:0)
GAE doest不支持:
拥有多对多关系。
和
“加入”查询。您不能在过滤器中使用子实体的字段 在父类上执行查询时。请注意,您可以测试 父级关系字段直接在使用密钥的查询中。
因此我建议您更改对象模型,直接在项目列表的用户对象中使用long ID,在任务列表和用户的项目对象中使用
或者我建议直接使用数据存储api,因为这样你就知道你的数据是如何存储的,你如何获得它并且:你将为GAE设计数据。 使用数据存储api,您可以使用Ancestor Paths