【问题标题】:Ignoring some entity fields during saving in Objectify 4在 Objectify 4 中保存期间忽略某些实体字段
【发布时间】:2013-09-18 20:48:34
【问题描述】:

我正在尝试将 Objectify @IgnoreSave 注释与简单的 If 条件 (IfEmpty, IfNull) 一起使用,但它似乎不起作用。如果没有 If 条件,实际值不会像预期的那样持久化,但是,当我使用一些 If 条件时,它总是会持久化(例如,如果使用 IfNull 条件并提供空值,它会被持久化,因此数据存储中的原始值会被删除)。

...
@IgnoreSave(IfNull.class)
private String email;
...

...
this.objectify.save().entity(userDetails).now();
...

是否需要任何额外的配置?或者有没有人有同样的经历?

【问题讨论】:

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


    【解决方案1】:

    从“因此删除数据存储中的原始值”看来,您似乎误解了 GAE 数据存储的一个基本特征 - 实体是完整存储的。如果您@IgnoreSave 一个字段,它将在保存期间被忽略,因此该字段将不会出现在数据存储中。您无法更新某些字段而不是其他字段。

    【讨论】:

    • 您好,谢谢您的回答。我知道 GAE Datastore 的特性,但我可能没有得到 @IgnoreSave 注释的正确用途。我认为在后台它是这样工作的 - 当它与例如 IfNull 条件一起使用时,如果在保存期间给定字段的值为空,Objectify 执行“隐藏加载”以获取原始实体并使用其值给定字段以覆盖提供的实体中的 null。然后将实体作为一个整体存储。
    • Objectify 尽量避免“魔法”,并且通常只是按照您说的去做。除非您明确告诉它加载,否则它永远不会加载实体,并且除非您明确告诉它保存,否则它永远不会保存实体。 @IgnoreSave 正是这样做的——忽略保存时的字段。
    • 现在我很清楚了。然后我将不得不自己处理这种情况。感谢您的宝贵时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 2021-06-08
    • 2011-08-31
    • 2021-01-25
    相关资源
    最近更新 更多