2011-09-21 25 views
4

請考慮下面的示例查詢在客觀化@Embedded地圖GAE

@Entity 
public class Abc { 
    @Id 
    private Long id; 

    @Unindexed 
    private String name; 

    @Embedded 
    private Map<String, Xyz> objs; 
} 

public class Xyz { 
    private String objName; 
    private String objStatus; 
} 

現在我想農行對象以使得objs.get("someKey").getObjName().equals("someName")是真實的。

如何在Objectify中進行此查詢?另外,如果我將'objs'作爲列表而不是map來存儲,我可以查詢Abc的一個對象,以使其中一個列表值的objName爲'someName'?在這方面需要幫助。由於

回答

2

你應該能夠查詢是這樣的:

Objectify ofy = factory.begin 
ofy.query(Abc.class).filter("objs.someKey.objName=", "someName") 

地圖鍵是簡單的摺疊成實體的屬性的地圖,使用點作爲分隔符和地圖字段的名稱( 「objs」)作爲前綴以避免衝突。

+0

我們可以放入一個如此序列化的Map中的鍵/值的最大數量是多少? – xybrek

+0

應用常規數據存儲限制,即在將數據存儲在數據存儲的內部結構(協議緩衝區)後爲1 MB。 請注意,這種方法有些過時,Objectify 4對嵌套地圖有不同的(但相似)方法。 –

+0

雖然考慮映射是否可索引,但它會花費很多,因爲每個索引(對於每個額外的鍵 - 值對)都意味着另外2個數據存儲寫入 – wonderwall