获取实体密钥

时间:2012-05-25 10:54:22

标签: google-app-engine objectify

基于此处的Q& A: Get an Objectify Entity's Key

对于持久化对象,获取实体键:

@Transient
Key<Categoria> getKey() {
   return new Key<Categoria>(Categoria.class, id);
}

Doens不会返回相同的密钥:

Objectify ofy = ObjectifyService.begin();
Key<Categoria> key = ofy.getFactory().getKey(someobject);

还是应该呢?

我的模型看起来像这样:

@Entity
class Categoria{
  @Parent
  private Key<Someclass> parentKey;

  @Transient
  Key<Categoria> getKey() {
   return new Key<Categoria>(Categoria.class, id);
 }
 // Code omitted
}

2 个答案:

答案 0 :(得分:2)

如果Categoria@Parent字段,它只会生成不同的密钥。在这种情况下,您需要将父键与类和id一起传递给Key构造函数。

答案 1 :(得分:0)

它应该。我总是通过从长ID创建的密钥获得Objectify Entities。如果需要,您还可以使用返回的密钥从密钥中获取长ID。

编辑: 你不能按照你的方式获得钥匙。

你必须这样做。

Key<Car> rootKey = new Key<Car>(Car.class, 959);
Key<Car> keyWithParent = new Key<Car>(parent, Car.class, 959);

from the objectify wiki

所以对于这一行:     键key = ofy.getFactory()。getKey(someobject);

键将包含父键PLUS和Categoria键

这意味着在函数中执行查找时必须包含父键

Key<Categoria> getKey() {
 return new Key<Categoria>(parentKey, Categoria.class, id);
}