我可以控制Objectify如何序列化嵌入式实体?

时间:2014-10-29 04:17:43

标签: java google-app-engine google-cloud-datastore objectify

我使用Objectify将实体嵌入到另一个实体中。我在嵌入和保存之前将某些字段设置为null,因为我将完整的实体存储在其他地方并且我只是冗余地存储嵌入的实体,因此我不必明确地获取()它。 [是的,我知道get()相当便宜,但在我的情况下仍然太贵了,所以我宁愿在一条记录中包含所有内容。]

在数据存储区(本地)中,嵌入式实体如下所示:

<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 /我自己的记录解决这个问题,但我宁愿不这样做。

我记得已经读过数据存储区分null和空,我想知道我是否可以控制Objectify序列化嵌入实体的行为。

任何便宜的解决方法? Loadgroups?任何缺点,你可以看到我在做什么可能导致问题,例如当这样的&#34;准系统&#34;实体是通过REST发送并缓存的吗?

1 个答案:

答案 0 :(得分:2)

将此注释放在您的字段上:

@IgnoreSave(IfNull.class)
private String yourField;

这将阻止存储空值。您可以使用其他If条件,也可以自己编写。 @Index@Unindex也接受这些条件。