Java App Engine获取自动生成的密钥值

时间:2010-06-25 21:44:58

标签: java google-app-engine google-cloud-datastore

我一直在尝试将tomcat / mysql应用程序移植到Google App Engine。我正忙着获取刚才持久化的对象的关键值。有没有办法获取持久对象的Key值?有没有人有Java代码可以说明如何做到这一点?

谢谢, 埃里克

3 个答案:

答案 0 :(得分:2)

我认为在我们告诉你你做错了什么之前,你需要发布一个代码示例。我有一个id类型为Long的实体,在我调用makePersistent()后,id会被填入。这是代码的样子:

    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对象。如果你有id:

,你可以自己创建
public Key getKey() {
    return KeyFactory.createKey(GameEntity.class.getSimpleName(), id);
}

答案 1 :(得分:0)

JPA或JDO还是什么?

Google应用引擎有很好的文档

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

答案 2 :(得分:0)

不完全回答,但是......

在提交事务之前,显然没有分配ID。在我保存之前,我自己切换到为我的GAE对象生成随机字符串ID。