Добавление в коллекцию в google-appengine - PullRequest
3 голосов
/ 29 марта 2011

Так что я застрял на этой проблеме около 3 недель.Я прочитал это: http://code.google.com/appengine/docs/java/datastore/jdo/relationships.html, и это, похоже, не работает.По сути, у меня есть постоянный объект, который называется пул, и мне нужно добавить игроков в этот пул.Игроки также являются постоянными объектами.У меня есть неизвестные отношения между пулом и игроками, где в пуле есть набор идентификаторов игроков (primaryKey ids ...)

Итак, что я пробовал: 1) Я использовал Long в качестве основногоключ к обоим, это не сработало.2) Пробовал использовать Key из appengine в качестве первичного ключа, но это не сработало, потому что вы не можете использовать реализацию Key на стороне клиента.Ни один из обходных путей, которые я нашел, не работает, и объект передачи данных небрежный / грязный / errorprone / hackish и всякого рода плохой.3) Попытка использовать строку в качестве идентификатора, как это ...

@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
private String id;

, и это тоже не сработало.Когда я пытаюсь добавить строку в ее набор, как это ...

public void addPlayers(Pool pool, List<String> players) {
    PersistenceManager pm = getPersistenceManagerFactory().getPersistenceManager();

    try {
        pm.currentTransaction().begin();
        Pool oldPool = pm.getObjectById(Pool.class, pool.getID());
        for(String id : players) {
            oldPool.addPlayer(id);
            System.out.println("Added id:" + id);
        }
        pm.currentTransaction().commit();
    } catch (Exception e) {
        pm.currentTransaction().rollback();
        e.printStackTrace();
    } finally  {
        pm.close();
    }

}

, она молча провалится.Как и в ... это просто не сохраняется их.

Любые предложения будут хороши.Это для школьного проекта, поэтому, к сожалению, я вынужден сделать это в GWT, используя JDO.Мои проф и ТА не могут мне помочь, потому что они не знакомы с GWT ... забавно ... так что это мое последнее средство:)

Спасибо!

1 Ответ

1 голос
/ 31 марта 2011

Хотя существуют веские причины для представления ваших отношений в виде списка на стороне «один», более обычный подход заключается в том, чтобы объекты на стороне «многие» имели ссылку на объект на «один»' боковая сторона.То есть, вместо того, чтобы у каждого пула был список игроков, у каждого игрока должна быть ссылка на один пул, к которому он принадлежит.Вы пробовали это?

...