Java Can';t appengine-org.datanucleus.store.types.sco.simple.Date中的按日期查询不是受支持的属性类型

Java Can';t appengine-org.datanucleus.store.types.sco.simple.Date中的按日期查询不是受支持的属性类型,java,google-app-engine,jdo,Java,Google App Engine,Jdo,尝试在Google的Java应用程序引擎上使用JDO语法运行查询: query.setFilter("dateField < dateParam"); query.declareParameters("java.util.Date dateParam"); List<...> results = (List<...>) query.execute(maxDate); 但是我没有传递org.datanucleus.store.types.sco.simple.Dat

尝试在Google的Java应用程序引擎上使用JDO语法运行查询:

query.setFilter("dateField < dateParam");
query.declareParameters("java.util.Date dateParam");
List<...> results = (List<...>) query.execute(maxDate);
但是我没有传递
org.datanucleus.store.types.sco.simple.Date
,我传递的是
java.util.Date


发生了什么事?

事实上,我认为我传递了一个
java.util.Date
是错误的。我实际上是从另一个从数据存储中检索到的对象中获取
maxDate
。是的,该对象是java.util.Date,但在引擎盖下,AppEngine将其替换为
org.datanucleus.store.types.sco.simple.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);
if(org.datanucleus.store.types.sco.simple.Date的maxDate实例){
maxDate=新日期((org.datanucleus.store.types.sco.simple.Date)maxDate.getTime());
}
query.setFilter(“dateField
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);