人是一个对象有名字和最喜欢的食物,
食物是一个有名字和食物的对象。
人与食物的关系是多对多的
一个人可以有很多喜欢的食物,
食物可以有很多食物粉丝
感谢
PersistenceManager pm = PMF.get().getPersistenceManager();
//select from ...
Query query = pm.newQuery(Person.class);
//where ...
query.setFilter("name == nameParam");
//order by ...
query.setOrdering("id desc");
//declare a parameter to use later
query.declareParameters("String nameParam");
try {
@SuppressWarnings("unchecked")
//execute query
List<Person> results = (List<Person>) query.execute(person_name);
//if found
if (results.iterator().hasNext()) {
for (Person p : results) {
out.println("<p>" + p.getKey() + "</p>");
out.println("<p>" + p.getName() + "</p>");
Set<Key> foods = p.getFavoriteFoods();
Iterator<Key> i = foods.iterator();
while(i.hasNext()) {
Food f = pm.getObjectById(Food.class, i.next());
out.println("<p>" + f.getName()+ "</p>");
i.remove();
}
}
} else {
out.println("<p>Not Found.</p>");
}
} finally {
query.closeAll();
}
答案 0 :(得分:0)
看起来你正在使用JDO。应用引擎JDO文档使用这个确切的例子 - 人和喜欢的食物 - 他们describe one recommended way to implement it: unowned many-to-many relationship。
具体而言,您首先要确定哪一方通常会有较少的相关实体。在这种情况下,平均食物可能会有更多的粉丝(数百万),而不是普通人会喜欢的食物(数十到数百)。
将一个键列表属性放在Person中,例如Set<Key> favoriteFoods
,为他们最喜欢的食物。为了获得一个人最喜欢的食物,你只需加载Person实体(花费一个数据存储空间)并查看favoriteFood
集。为了获得食物的粉丝,您将查询其favoriteFood
属性包含(GQL中为=
)的人物实体。