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