无法在appengine中按日期查询 - org.datanucleus.store.types.sco.simple.Date不是受支持的属性类型

时间:2015-06-03 09:30:33

标签: java google-app-engine jdo

尝试在Google的Java App Engine上使用JDO语法运行查询:

query.setFilter("dateField < dateParam");
query.declareParameters("java.util.Date dateParam");
List<...> results = (List<...>) query.execute(maxDate);

但我收到以下错误org.datanucleus.store.types.sco.simple.Date is not a supported property type

javax.jdo.JDOFatalUserException: Illegal argument
     NestedThrowables:
     java.lang.IllegalArgumentException: dateField: org.datanucleus.store.types.sco.simple.Date is not a supported property type.
         at org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:488)
         at org.datanucleus.api.jdo.JDOQuery.executeWithArray(JDOQuery.java:321)

但我没有通过org.datanucleus.store.types.sco.simple.Date,我通过java.util.Date

发生了什么?

1 个答案:

答案 0 :(得分:1)

实际上,我假设我传递java.util.Date是错误的。我实际上是从我从数据存储区检索到的另一个对象获取maxDate。是的,该对象是一个java.util.Date,但在引擎盖下,应用引擎将其交换为org.datanucleus.store.types.sco.simple.Date子类型。

因此,一个简单的解决方法是确保首先使用一个新的Date对象:

if (maxDate instanceof org.datanucleus.store.types.sco.simple.Date) {
    maxDate = new Date(((org.datanucleus.store.types.sco.simple.Date) maxDate).getTime());
}

query.setFilter("dateField < dateParam");
query.declareParameters("java.util.Date dateParam");
List<...> results = (List<...>) query.execute(maxDate);