要在Google App Engine中识别我的JDO对象,请使用Key
类型。它工作正常,但当我需要通过URL传递它时,它会变得有点长。
例如:http://mysite.com/user/aghtaWx1LWFwcHIZCxIGTXlVc2VyGAMMCxIHTXlJbWFnZRgHDA
在我的管理员查看器中查看我的实体时,我可以看到数据存储也为我的实体对象设置了一个“id”,它似乎是一个增量数值,与Key字符串相比非常短。我可以使用它来获取有关我的对象的信息吗?我该怎么做呢?我尝试使用带有id的getObjectbyId()
而不是密钥......它不起作用。
有什么想法吗?
答案 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);