[英]Filter objects passing a property of a Ref<?> of other object in GAE Datastore
我嘗試了不同的類型並閱讀了文檔,但無法確定是否可以對屬性內部引用Ref <>進行過濾。
這是我的課程:My 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
。
這是我的端點代碼:
首先,我從擁有的密鑰中加載beerBrandRef:
BeerBrand tmpBrand = ofy().load().type(BeerBrand.class)
.id(pBrandKey).now();
然后,我試圖在Ref中傳遞Ref:
items = ofy().load().type(Item.class)
.filter("beerRef.beerBrandRef", tmpBrand)
.list();
可能嗎? 如果沒有,我如何構建我的數據存儲區以使這種搜索有效(不一定要使用Ref <>)
附言:這是我與GAE,Datastore和Objectify合作的第一個項目,所以我有些失落。
感謝您的幫助。
關於查詢,您可以將Key<?>
, Key
(本機底層api版本), Ref<?>
和實際實體本身視為可互換的。 您可以將這四件事中的任何一個傳遞給filter()
調用。
更新:您是正確的-您不能在GAE查詢中表示聯接。 這並不是說您不能執行聯接,您只需要手動編寫自己的代碼即可-您是查詢計划者。 相同的規則也適用於聚合。 對於簡單的連接和聚合,它可以正常工作,但是當然有局限性。
數據存儲區非常適合作為事務性存儲區和真實的權威來源,但是對於分析而言卻非常糟糕。 我的建議是將相關數據復制到真實的RDMBS中,無論是Cloud SQL還是Postgres(其驅動程序一直在開箱即用的GAE上為我工作)。 使用任務隊列。 這對我來說效果很好,並提供了兩全其美的功能-數據存儲的無限擴展和零維護,以及RDBMS的靈活性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.