我尝试过不同的类型并阅读文档,我无法找出属性内部人员的过滤Ref<>是可能的。
这是我的课程: 我的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的第一个项目,所以我有点失落。
我感谢任何帮助。
答案 0 :(得分:1)
对于查询,您可以将write(ivtk) 'X_COORDINATES '//str1//' float'//lf
,Key<?>
(本机低级API版本),Key
和实际实体本身视为可互换。您可以将这四项内容中的任何一项传递给Ref<?>
来电。
更新:您是对的 - 您无法在GAE查询中表达联接。这并不是说你不能做连接,你只需要自己在自己的代码中手工完成它们 - 你就是查询规划器。同样的规则也适用于聚合。对于简单的连接和聚合,这很好,但当然它有限制。
数据存储区作为事务存储和真实的权威来源非常棒,但对于分析来说却很糟糕。我的建议是将相关的数据位复制到真正的RDMBS中,无论是Cloud SQL还是Postgres(其驱动程序一直在GAE上为我工作)。使用任务队列。这对我来说非常有效,并且提供了两全其美 - 数据存储的无限扩展和零维护,以及RDBMS的灵活性。