2016-02-05 17 views
0

我尝试了不同的类型并阅读文档,但我无法弄清楚属性内部人员的过滤参考文献<>是可能的。在GAE数据存储区中传递其他对象的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的商品。

这是我的终点代码:

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

然后我试图通过在过滤器的参考:

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

首先,我从我有钥匙加载beerBrandRef

可能吗?如果没有,我怎样才能构建我的数据存储以获得这种搜索工作(不一定与参考<>

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

我很感激任何帮助。

回答

1

关于查询,您可以将Key<?>Key(原生低级别api版本),Ref<?>和实际实体本身视为可互换。您可以将这四件事中的任何一件传递给您的filter()电话。

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

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

+0

是的,我可以通过I'Ref ','键'或'Key'来过滤我当前实体的属性。在上面的例子中,如果我通过一个'Ref '来过滤'beerRef',它可以很好地工作。但是我想要做的是深入一点,过滤实体'BeerBrand'中的'Ref ',返回实体'Item'列表。 当我在阅读(书籍和文档)时,我几乎可以肯定这是不可能的,因为它类似于SQL数据库中的JOIN。但我只是想要知道更多关于它的人的确认。 感谢您的答复stickfigure。我是你的粉丝。 – jluiz20

+0

啊!我误解了。我会更新答案。 – stickfigure

相关问题