在JDO(AppEngine)中,在持久化对象之后,如何获取该特定对象的键?

时间:2011-02-27 18:29:45

标签: java google-app-engine persistence jdo object-persistence

当我将对象持久保存到数据存储区时,何时(以及如何)可以获取我刚刚持有的特定对象的键?例如,如果我有:

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

Query类:

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)中,我可以获得该特定对象的自动生成的ID吗?另外,我如何获取该特定对象的id?有关如何有效地做到这一点的任何建议?

感谢。

1 个答案:

答案 0 :(得分:3)

一旦对象被持久化,您就可以在 Point 2 中获取密钥。 第1点过早,并且在发生异常时也会调用第3点,因此您无法保证拥有生成的密钥。

正如official docs所说:“保存实例时会填充实例的长键字段。”