【问题标题】:How to do a Date range query using JDO on Google App Engine如何在 Google App Engine 上使用 JDO 进行日期范围查询
【发布时间】:2011-06-24 15:21:15
【问题描述】:

这是我要开始工作的代码 sn-p:

final Query query = pm.newQuery("SELECT FROM model.Strip WHERE publishOn <= startDate
&& endDate >= publishOn PARAMETERS Date startDate, Date endDate import java.util.Date");

由于我只查询一个参数,这应该根据 Google Docs 工作。

允许一个不等式过滤器 仅限属性 查询只能使用 不等式过滤器(=、>、!=) 在其所有的一个属性上 过滤器。例如,这个查询是 允许:

import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.Query.FilterOperator;
import com.google.appengine.api.datastore.Query.SortDirection;

Query q = new Query("Person");
q.addFilter("birthYear", FilterOperator.GREATER_THAN_OR_EQUAL, minBirthYearParam);
q.addFilter("birthYear", FilterOperator.LESS_THAN_OR_EQUAL, maxBirthYearParam);

当然这是使用低级 Datastore 接口,但我希望 JDO 实现也使用它。

但是当我运行查询时,我收到了这个无用的错误消息。

org.datanucleus.store.appengine.query.DatastoreQuery$UnsupportedDatastoreFeatureException: 查询问题 = publishOn 参数 日期 startDate, 日期 endDate 导入 java.util.Date>: 意外的表达式类型 while 解析查询: org.datanucleus.query.expression.ParameterExpression

有谁知道如何进行这样的范围查询

【问题讨论】:

    标签: google-app-engine jdo date-range jdoql


    【解决方案1】:

    我想通了。 . .

    final Query query = pm.newQuery("SELECT FROM model.Strip WHERE publishOn <= startDate
    && endDate >= publishOn PARAMETERS Date startDate, Date endDate import java.util.Date");
    

    改为

    final Query query = pm.newQuery("SELECT FROM model.Strip WHERE this.publishOn >= startDate
    && this.publishOn <= endDate PARAMETERS java.util.Date startDate, java.util.Date endDate");
    

    您必须将属性放在变量之前,this. 也不会受到伤害

    我改用了 Objectify,所以我不得不与这些愚蠢的 JDO/JPAsemantics 作斗争!

    【讨论】:

      猜你喜欢
      • 2010-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      相关资源
      最近更新 更多