Идентификатор App Engine.Ключ против идентификатора - PullRequest
7 голосов
/ 05 апреля 2011

Для идентификации моих объектов JDO в Google App Engine я использую тип Key. Это работает нормально, но когда мне нужно передать это через URL-адреса, это становится довольно долго.

Например: http://mysite.com/user/aghtaWx1LWFwcHIZCxIGTXlVc2VyGAMMCxIHTXlJbWFnZRgHDA

При просмотре моих сущностей в моей программе просмотра администратора я вижу, что хранилище данных также устанавливает «id» для моего объекта сущности, который выглядит как инкрементное числовое значение, которое является довольно коротким по сравнению со строкой Key. Могу ли я использовать это, чтобы получить информацию о моем объекте? Как мне это сделать? Я попытался использовать getObjectbyId() с идентификатором вместо ключа ... это не работает.

Есть идеи?

Ответы [ 2 ]

9 голосов
/ 05 апреля 2011

Да, вы можете сделать это. Всякий раз, когда вам нужно получить идентификатор, вы можете использовать следующий вызов метода. Предположим, вы используете объект класса сущности User с именем user: user.getKey().getId(). Идентификатор имеет тип long. См. JavaDoc из com.google.appengine.api.datastore.Key для получения дополнительной информации.

Когда у вас есть идентификатор, вы можете построить из него Key, а затем просто запросить объект.

Key key = KeyFactory.createKey("User", id);
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
User user = datastore.get(key);
2 голосов
/ 05 апреля 2011

Вам необходимо определить идентификатор вашей сущности в качестве первичного ключа:

private class MyObject implements Serializable{
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;
}

Тогда вы можете попробовать это:

long id = someObject.getId();

MyObject mo = getPM().getObjectById(MyObject.class, id);
...