Как уникальным образом идентифицировать и извлекать дочерние объекты в JDO - PullRequest
1 голос
/ 17 июля 2010

Я только учусь JDO и GAE, и я очень застрял в этом.

Я перестал иметь только

public class Article {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;
    ...
}

Теперь у меня тоже есть родитель:

public class ArticleCollection {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;
    private long count
    private Set<Article> articles;
}

Однако после этого следующий код для извлечения статьи по id больше не работает.Как мне однозначно идентифицировать объект?

Article article = (Article)pm.getObjectById(KeyFactory.createKey(Article.class.getName(), id));

Любая помощь очень ценится!

1 Ответ

2 голосов
/ 17 июля 2010

Ключ ребенка содержит информацию о его родителе. Вам необходимо использовать метод KeyFactory, который включает родительский идентификатор.

createKey(Key parent, java.lang.String kind, long id)
          Creates a new Key with the provided parent from its kind and ID.

Проверьте javadoc для более подробной информации. Для удобства также есть класс Builder, который позволяет вам делать что-то вроде:

Key key = new Builder("ArticleCollection", 123).addChild("Article", 1424).getKey();

Эта форма становится более полезной по мере того, как ваша иерархия углубляется, потому что вы можете связать кучу addChild вместе перед вызовом getKey.

Если вы не знаете родителя статьи, я думаю, что вы застряли при выполнении GQL-запроса, а не по ключу.

...