如何从多对多的关系中获取每个对象

如何从多对多的关系中获取每个对象

问题描述:

人是一个对象有名字和favoriteFoods,
食物是一个对象有名字和foodFans。如何从多对多的关系中获取每个对象

人与食物之间的关系是多对多
一个人可以有很多favoriteFoods的,
和食品可以有很多的foodFans

我写了一个简单的java来从各个favoriteFoods一个人
我想知道我所做的是正确的吗?
有没有更好的解决方案?

THANKS

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(); 
    } 

看起来像你使用JDO。应用程序引擎JDO文档使用这个确切的例子 - 人们和最喜欢的食物 - 他们和describe one recommended way to implement it: unowned many-to-many relationship

具体而言,您首先要确定哪一方通常会有较少的相关实体。在这种情况下,平均食物可能会拥有比一般人最喜欢的食物(数百到数百)更多的粉丝(数百万)。

将人物的关键列表属性Set<Key> favoriteFoods,为他们最喜欢的食物。为了得到一个人最喜欢的食物,你只需加载Person实体(这会花费一个数据存储获得)并查看favoriteFood集合。为了获得食物的粉丝,你需要查询人物实体的favoriteFood属性(GQL中的=)食物。