【问题标题】:Return only entities which have a list field empty in Objectify仅返回 Objectify 中列表字段为空的实体
【发布时间】:2013-10-10 17:40:42
【问题描述】:

是否可以通过仅返回特定列表字段为空的实体来过滤 objectify 中的实体?

例如,如果我有一个客户端实体,它有一个属性“地址”,它是一种列表,我如何才能只返回根本没有关联地址的客户端?

是否存在某种“为空”或“为空”过滤器?比如:

ofy().load().type(Client.class).filter("address", null).list();

ofy().load().type(Client.class).filter("address is", null).list();

非常感谢。

【问题讨论】:

    标签: objectify


    【解决方案1】:

    列表属性由数据存储中没有数据表示;无法存储或索引“空列表”。

    最好的办法是创建一个合成索引属性,如“无地址”,并在 @OnSave 方法中填充它:

    class Client {
        ...
    
        @Index(IfTrue.class) boolean addressless;
    
        @OnSave void updateAddressless() {
            this.addressless = address.isEmpty();
        }
    }
    

    您现在可以按此过滤。该属性不必具有 getter/setter,因此它可以对您的应用程序的其余部分完全隐藏(作为过滤条件除外)。

    这种策略对于处理难以查询的情况通常很方便。

    【讨论】:

    • 我最终得到了一个类似的解决方案(向我的实体添加一个 numberOfItems 字段),但是在我的 DAO 中设置它的值,而不是使用 @OnSave 装饰实体内部的方法。您的解决方案肯定比 min 好得多。非常感谢您的关注。
    【解决方案2】:

    您不能使用 null 作为其值的 objectify 过滤器。将空列表更改为空列表如何?

    【讨论】:

    • 这也行不通;数据存储区中的空列表由缺少数据表示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    相关资源
    最近更新 更多