В JDO (AppEngine) после сохранения объекта, как я могу получить ключ этого конкретного объекта? - PullRequest
2 голосов
/ 27 февраля 2011

Когда я сохраняю объект в хранилище данных, когда (и как) я могу получить ключ от этого конкретного объекта, который я только что сохранил?Например, если у меня есть:

@PersistenceCapable
public class Employee {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key id;
...
}

Класс запроса:

public class EmployeeQuery {
    // Persist a single Employee
    public void persistEmployee(Employee e) {
    // 1. Can I get the id at this point?
    PersistenceManager pm = PMF.get().getPersistenceManager();
    try {
        pm.makePersistent(e);
        // 2. Can I get the id at this point?
    } 
    finally {
        pm.close();
        // 3. Can I get the id at this point?
    }
    }
...
}

Сведения о PersistenceManager и PMF можно найти здесь: http://code.google.com/appengine/docs/java/datastore/jdo/overview.html#Getting_a_PersistenceManager_Instance

Какупомянуто выше, где в упомянутых областях (1, 2 или 3) я могу получить автоматически сгенерированный идентификатор этого конкретного объекта?Кроме того, как я могу получить идентификатор этого конкретного объекта?Любые предложения о том, как сделать это эффективно?

Спасибо.

1 Ответ

3 голосов
/ 27 февраля 2011

Вы можете получить ключ в Точка 2 , как только объект сохранится. Точка 1 слишком ранняя, и Точка 3 также вызывается при возникновении исключения, поэтому вы не можете гарантировать наличие сгенерированного ключа.

Как сказано в официальных документах : "Поле длинного ключа экземпляра заполняется при сохранении экземпляра."

...