Как однозначно определить и выбрать дочерние объекты в JDO

Я просто изучаю 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;
}

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

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

Любая справка очень ценится!

1
задан Jacob 17 July 2010 в 15:04
поделиться

1 ответ

Ключ ребенка включает информацию о его родителе. Вам необходимо использовать метод 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-запрос, а не get по ключу.

2
ответ дан 2 September 2019 в 22:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: