在我的Spring项目和使用Google App Engine中,我正在尝试从数据存储中获取实体,但在这种情况下,此实体具有@Parent关系。我只有实体的id,这点不知道有关父关系的信息。
我使用ancestor
filterKey
尝试了不同的查询,此时我有这个:
@Override
public House getNotRestrictions(Long id){
return objectifyService.ofy().load().type(House.class).filterKey(Key.create(House.class, id)).first().now();
}
我的模型是这样的:
@Entity
public class House {
@Id
public Long id;
//other attributes
@Index
@Parent
public Key<User> createdBy;
//methods getter and setters
}
当我执行查询时,它返回到我和null实体。但是存在数据存储区的id。
答案 0 :(得分:1)
每个实体都有一个密钥,其中包括其种类,ID /名称以及所有祖先的种类+ ID /名称。如果您创建密钥而不传递祖先信息,则此密钥将与您尝试检索的实体不同。
另请注意,如果他们有不同的父母,您可以拥有许多具有相同种类和ID的实体。
答案 1 :(得分:0)
只有两种方式:
//1. creating the full key with parent:
Key<House> houseKey = Key.create(Key.create(User.class, userId), House.class, id);
//2. or using the webSafeString key representation which contains the whole key path including namespace and parents:
String webSafeKey = "<encoded key as string>";
Key<House> houseKey = Key.<House>create(webSafe)
//Then you can fetch the entity:
House house = ofy().load().key(houseKey).now();
既然你提到你不认识父母。您可以开始使用webSafeString - 请参阅Key.toWebSafeString()方法