【问题标题】:In JDO (AppEngine), after persisting an object, how can i get the key of that particular object?在 JDO (AppEngine) 中,持久化一个对象后,我如何获取该特定对象的密钥?
【发布时间】:2011-07-05 08:03:20
【问题描述】:

当我将一个对象持久化到数据存储区时,我何时(以及如何)可以获得我刚刚持久化的特定对象的密钥?例如,如果我有:

@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)中,我可以在哪里获得该特定对象的自动生成 ID?另外,我怎样才能得到那个特定对象的 id?关于如何有效地做到这一点的任何建议?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    一旦对象被持久化,您就可以在 Point 2 中获取密钥。 Point 1太早了,Point 3也是在异常发生的时候调用,所以不能保证有生成的key。

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

    【讨论】:

    • 我可以从 Employee 类中调用我自己的函数“getId()”吗?
    猜你喜欢
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    相关资源
    最近更新 更多