4

这是所有 objectify/app 引擎专家的问题:

我通过将父对象的键存储在子对象中来创建具有父/子关系的对象。这存储在 Key 类型的对象中。例如,假设我有一个汽车对象和轮胎对象。轮胎对象将父键存储在 Key 类型的变量中。

@Entity
Public class Tire{
     @Id Long id;
     Key<Car> ParentKey;

     int size;
}

在我的应用程序中,我需要获取特定汽车的所有轮胎。我可以通过查询来做到这一点:轮胎轮胎 = oft.query(Tire.class).filter("ParentKey",carKey).get();

这是实现此目的的适当方法吗?这会导致实体组出现任何问题吗?这对大量汽车和轮胎来说是否有效?

4

2 回答 2

5

现在,您没有创建父/子关系,至少按照app engine的定义。查看文档:添加父/子关系可以加快速度,因为汽车及其轮胎将物理存储在一起,但如果在某些时候不再需要它们,它们可能很难移除。

要使用 Objectify 创建父/子关系,请添加@Parent注释:

// Use com.googlecode.objectify.Key instead of 
// com.google.appengine.api.datastore.Key
@Parent Key<Car> parentKey;

现在,为了获取属于特定汽车的所有轮胎:

List<Tyre> tires = ofy().query(Tyre.class).ancestor(carKey).list();
于 2011-08-30T02:37:56.153 回答
1

我正在使用完全相同的方式 - 没问题。

我看不出与实体组有任何冲突,而且它适用于大型团体(至少对于数千个实体)

PS 如果您需要获取属于同一组的数据 - 您不需要使用 GAE 组。更重要的是:实体组最适合交易,而不是过滤。

于 2011-08-29T20:47:37.353 回答