2014-10-29 42 views
0

我正在使用Objectify在另一個實體中嵌入一個實體。在嵌入和保存之前,我將某些字段設置爲null,因爲我將完整的實體存儲在別處,並且我只是冗餘地存儲嵌入的實體,所以我不必明確地獲取()它。 [是的,我知道get()相當便宜,但在我的情況下它仍然太貴,所以我寧願將所有內容都放在一條記錄中。]我可以控制Objectify如何序列化嵌入式實體嗎?

在數據存儲區(本地)中,嵌入式實體看起來像這個:

<EmbeddedEntity [User(6702622882922496)]: status = null (unindexed) avatar = fbcdn-profile-a.akamaihd.net/hprofile-ak-xfa1/v/t1.0-1/c127.37.466.466/s160x160/284313_181267978606379_897018_n.jpg?oh=07d9502745b9b4d80e5ed52fb46d8b24&oe=54C4D556&__gda__=1422892826_7eb452a4b837d668572e5053c5936be8 (unindexed) displayName = null (unindexed) version = 1414555328756 (unindexed) > (unindexed) 

正如你所看到的,Objectify顯式地存儲空字段。

我知道我可以通過序列化/ JSONing /自己的任何記錄來解決此問題,但我寧願不要。

我記得已經讀過數據存儲區分空和空,我想知道是否可以控制Objectify如何序列化嵌入實體的行爲。

任何便宜的解決方法? Loadgroups?任何缺點,你可以看到我在做什麼可能會導致問題,例如,當這樣的「準系統」實體通過REST發送和緩存?

回答

2

把這個註解你的領域:

@IgnoreSave(IfNull.class) 
private String yourField; 

這將防止空被存儲。還有其他If條件可以使用,或者您可以自己寫。 @Index@Unindex也接受這些條件。

+0

這很好地解決了它,謝謝傑夫。在類級別允許@IgnoreSave()是否有意義,比如@ Index/@ Unindex,在那裏我可以爲整個類設置默認值? – 2014-10-29 15:19:07