Java App Engine Получить значение автоматически сгенерированного ключа - PullRequest
2 голосов
/ 26 июня 2010

Я пытался перенести приложение tomcat / mysql на Google App Engine. Я немного зависаю при получении ключевых значений объектов, которые я только что сохранил. Есть ли способ получить значение Key для сохраняемого объекта? У кого-нибудь есть код на Java, который может показать, как это сделать?

Спасибо, Eric

Ответы [ 3 ]

2 голосов
/ 26 июня 2010

Я думаю, вам нужно опубликовать пример кода, прежде чем мы расскажем вам, что вы делаете неправильно.У меня есть сущность с идентификатором типа Long, и идентификатор заполняется после того, как я позвоню makePersistent().Вот как выглядит код:

    GameEntity game = new GameEntity();
    log.warning("before makePersistent id is " + game.getId());
    pm.makePersistent(game);
    log.warning("after makePersistent id is " + game.getId());

Вот фрагмент класса GameEntity:

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class GameEntity {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;

И результат показывает, что вы ожидаете:

WARNING 6428 - before makePersistent id is null
WARNING 6444 - after makePersistent id is 6

ОБНОВЛЕНИЕ: мне запоздало пришло в голову, что вам может понадобиться настоящий объект Key.Вы можете создать это самостоятельно, если у вас есть идентификатор:

public Key getKey() {
    return KeyFactory.createKey(GameEntity.class.getSimpleName(), id);
}
0 голосов
/ 26 июня 2010

Не совсем ответ, но ...

Идентификаторы, по-видимому, не назначаются, пока вы не совершите транзакцию. Я переключился на генерацию случайных строковых идентификаторов для своих объектов GAE, прежде чем сохранить их.

0 голосов
/ 26 июня 2010

JPA или JDO или что?

В движке Google есть хорошие документы

http://code.google.com/appengine/docs/java/datastore/usingjpa.html

...