客观化复合过滤器实现或黑客攻击

时间:2015-04-15 02:20:31

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

似乎Objectify不支持数据存储区的CompositeFilter。但客观化确实需要Filter。那么现在我如何在客观化中实现复合AND过滤器?我正在从Datanucleus转移,我需要查询

"SELECT f.healthy FROM Food f WHERE  f.fan = :userid AND flavor = : flavor";

所以类型为Food.class,字段为fanflavor

2 个答案:

答案 0 :(得分:5)

您应该创建一个复合过滤器并将其传递给接受过滤器的ofy查询变量。

CompositeFilterOperator.and(
     FilterOperator.EQUAL.of("f.fan", userId),
     CompositeFilterOperator.or(
         FilterOperator.EQUAL.of("flavor", flavor),
         FilterOperator.EQUAL.of("color", color)));

然而,实现OR过滤器有其自身的副作用;例如你不能使用游标。

以上代码的参考:https://cloud.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/Query.CompositeFilter

答案 1 :(得分:0)

查询非常简单:

List<Food> foods = ofy().load().type(Food.class).filter("fan", xxx).filter("flavor", xxx).list();

确保您计划过滤/排序的所有字段都标记为@Index ,然后才能保留实体。