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

Kat*_*lon 0 google-app-engine objectify google-cloud-endpoints google-cloud-datastore

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

"SELECT f.healthy FROM Food f WHERE  f.fan = :userid AND flavor = : flavor";
Run Code Online (Sandbox Code Playgroud)

所以类型是Food.class和字段是fanflavor

tj-*_*ess 5

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

CompositeFilterOperator.and(
     FilterOperator.EQUAL.of("f.fan", userId),
     CompositeFilterOperator.or(
         FilterOperator.EQUAL.of("flavor", flavor),
         FilterOperator.EQUAL.of("color", color)));
Run Code Online (Sandbox Code Playgroud)

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

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