仅返回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();

非常感谢。

2 个答案:

答案 0 :(得分:5)

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

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

class Client {
    ...

    @Index(IfTrue.class) boolean addressless;

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

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

此策略通常可以方便地处理难以查询的情况。

答案 1 :(得分:0)

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