как получить каждый объект от отношения многих ко многим - PullRequest
0 голосов
/ 05 марта 2011

Персона - это объект, у которого есть имя и любимые продукты,
Еда - это объект, у которого есть имя и еда. Поклонники.

отношения между человеком и едой много-много
.
и в еде может быть много едыФанаты

я написал простую java, чтобы получить каждый любимый продукт от одного человека
я хочу знать, что я сделал правильно?
Есть ли лучшее решение?

СПАСИБО

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

1 Ответ

0 голосов
/ 11 апреля 2011

похоже, что вы используете JDO.Документация движка приложений JDO использует этот точный пример - люди и любимые продукты - и они описывают один рекомендуемый способ его реализации: неизвестное отношение «многие ко многим» .

конкретно, вы быСначала определите, какая сторона обычно будет иметь меньше связанных объектов.в этом случае средняя пища, вероятно, будет иметь больше поклонников (миллионы), чем обычная персона будет иметь любимые блюда (от десятков до сотен).

поместите ключевое свойство списка в Person, например, Set<Key> favoriteFoods, для еголюбимая едачтобы получить любимую еду человека, вы просто должны загрузить сущность Person (стоимость одного хранилища данных) и посмотреть набор favoriteFood.чтобы получить поклонников еды, нужно запросить сущности Person, свойство favoriteFood которых содержит (= в GQL) эту еду.

...