3

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

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

是否有某种“为空”或“为空”过滤器?就像是:

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

或者

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

非常感谢。

4

2 回答 2

7

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

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

class Client {
    ...

    @Index(IfTrue.class) boolean addressless;

    @OnSave void updateAddressless() {
        this.addressless = address.isEmpty();
    }
}

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

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

于 2013-10-11T02:40:00.467 回答
0

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

于 2013-10-10T23:31:08.637 回答