过滤对象,传递GAE数据存储区中其他对象的Ref <! - ? - >的属性

时间:2016-02-05 02:04:13

标签: java google-app-engine google-cloud-datastore objectify

我尝试过不同的类型并阅读文档,我无法找出属性内部人员的过滤Ref&lt;&gt;是可能的。

这是我的课程: 我的Beer.class

@Entity 
public class Beer {

@Id
private Long keyBeer;

@Load
@Index
Ref<BeerBrand> beerBrandRef;
}

这是Item.class

@Entity
public class Item {

@Index
@Load
Ref<Beer> beerRef;
..Fields
}

我尝试做的是按beerBrandRef过滤项目。例如,对于特定品牌,我需要列出具有beerBrandRef的所有商品。

这是我的端点代码:

首先,我从我拥有的Key加载beerBrandRef:

BeerBrand tmpBrand = ofy().load().type(BeerBrand.class)
            .id(pBrandKey).now();

然后我试图在过滤器中传递参考:

items = ofy().load().type(Item.class)
                .filter("beerRef.beerBrandRef", tmpBrand)
                .list();

有可能吗?如果没有,我如何构建我的数据存储区以使这种搜索工作(不一定与Ref&lt;&gt;)

Ps:这是我与GAE,Datastore和Objectify的第一个项目,所以我有点失落。

我感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

对于查询,您可以将write(ivtk) 'X_COORDINATES '//str1//' float'//lf Key<?>(本机低级API版本),Key和实际实体本身视为可互换。您可以将这四项内容中的任何一项传递给Ref<?>来电。

更新:您是对的 - 您无法在GAE查询中表达联接。这并不是说你不能做连接,你只需要自己在自己的代码中手工完成它们 - 你就是查询规划器。同样的规则也适用于聚合。对于简单的连接和聚合,这很好,但当然它有限制。

数据存储区作为事务存储和真实的权威来源非常棒,但对于分析来说却很糟糕。我的建议是将相关的数据位复制到真正的RDMBS中,无论是Cloud SQL还是Postgres(其驱动程序一直在GAE上为我工作)。使用任务队列。这对我来说非常有效,并且提供了两全其美 - 数据存储的无限扩展和零维护,以及RDBMS的灵活性。