尝试在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
。
发生了什么?
答案 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);