簡體   English   中英

篩選傳遞Ref屬性的對象 <?> GAE數據存儲區中其他對象的狀態

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM