App Engine标识符。密钥与Id

时间:2011-04-05 14:40:24

标签: java google-app-engine jdo

要在Google App Engine中识别我的JDO对象,请使用Key类型。它工作正常,但当我需要通过URL传递它时,它会变得有点长。

例如:http://mysite.com/user/aghtaWx1LWFwcHIZCxIGTXlVc2VyGAMMCxIHTXlJbWFnZRgHDA

在我的管理员查看器中查看我的实体时,我可以看到数据存储也为我的实体对象设置了一个“id”,它似乎是一个增量数值,与Key字符串相比非常短。我可以使用它来获取有关我的对象的信息吗?我该怎么做呢?我尝试使用带有id的getObjectbyId()而不是密钥......它不起作用。

有什么想法吗?

2 个答案:

答案 0 :(得分:9)

是的,你可以这样做。每当您需要获取ID时,您可以使用以下方法调用。假设您正在使用名为User的实体类user的对象:user.getKey().getId()。 id的类型为long。有关详细信息,请参阅com.google.appengine.api.datastore.Key的{​​{3}}。

每当您拥有ID时,您可以从中构建Key,然后只需查询该对象。

Key key = KeyFactory.createKey("User", id);
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
User user = datastore.get(key);

答案 1 :(得分:2)

您需要将实体中的ID定义为主键:

private class MyObject implements Serializable{
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;
}

然后你可以试试这个:

long id = someObject.getId();

MyObject mo = getPM().getObjectById(MyObject.class, id);