Google app engine 将筛选器链接到Objectify不';行不通

Google app engine 将筛选器链接到Objectify不';行不通,google-app-engine,objectify,Google App Engine,Objectify,出于某种原因,我需要将数据存储在映射中,我不想逐个声明objectify实体的每个属性 例如,以下是我的地图的外观: "COMPANY_NAME" -> "something" "TURNOVER_Min" -> 1000000 (a long value) "CLIENT_STATUS"-> true (a boolean value) 我想执行这样的查询: List<Lead> leads = ofy().load().type(Lead.class).fil

出于某种原因,我需要将数据存储在映射中,我不想逐个声明objectify实体的每个属性

例如,以下是我的地图的外观:

"COMPANY_NAME" -> "something"
"TURNOVER_Min" -> 1000000 (a long value)
"CLIENT_STATUS"-> true (a boolean value)
我想执行这样的查询:

List<Lead> leads = ofy().load().type(Lead.class).filter("data.NET_INCOME_MIN >", 5.0).filter("data.NET_INCOME_MAX <", 100.0).list();

List leads=ofy().load().type(Lead.class).filter(“data.NET\u INCOME\u MIN>”,5.0).filter(“data.NET\u INCOME\u MAX这不是你的错,也不是客观化问题

根据数据存储:

不等式过滤器最多限于一个属性

要做您想做的事情:

  • 使用第一个过滤器仅检索实体的键(使用
    .keys()
    而不是
    .list()
  • 使用第二个过滤器仅检索实体的键
  • 要执行ANDing,需要获取上面检索到的两个关键点集的交点
  • 现在,您有了所需实体的密钥,可以通过批处理get操作获取实体

  • 谢谢你,这对我帮助很大!我用这个逻辑处理了许多其他案例(其中一个:)
    import java.io.Serializable;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    import com.googlecode.objectify.annotation.Entity;
    import com.googlecode.objectify.annotation.Id;
    import com.googlecode.objectify.annotation.Index;
    
    @Entity
    public class Lead implements Serializable {
    
        private static final long serialVersionUID = 5920146927107230150L;
    
        @Id
        private String url;
    
        @Index
        private Date dateCreated;
    
        @Index
        private Map<String, Object> data = new HashMap<>();
    
        public Lead() {}
    
        public Lead(String url) {
            this.url = url;
            this.dateCreated = new Date();
        }
    
        public void addData(String key, Object value) {
            data.put(key, value);
        }
    
        public String getUrl() {
            return url;
        }
    
        public void setUrl(String url) {
            this.url = url;
        }
    
        public Date getDateCreated() {
            return dateCreated;
        }
    
        public void setDateCreated(Date dateCreated) {
            this.dateCreated = dateCreated;
        }
    
        public Map<String, Object> getData() {
            return data;
        }
    
        public void setData(Map<String, Object> data) {
            this.data = data;
        }   
    }