2014-10-29 37 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