您好,我刚开始使用Google App Engine,这个错误超出了我的范围。
尝试将Joda DataTime与Google App Engine一起使用。我有一个持有dateTime的实体,当它到达em.close()时我得到错误;错误读取“sentTime:org.joda.time.DateTime不是受支持的属性类型。”
EntityManagerFactory emf = EMF.get();
EntityManager em = null;
try {
em = emf.createEntityManager();
List<Tasks> schedule = patients2.getTasks();
Tasks tasks = new Tasks();
String date = req.getParameter("dateTime")+":00.000-00:00"; DateTime sentTime = new DateTime (date);
tasks.setSentTime(sentTime);
schedule.add(tasks);
patients2.setTasks(schedule);
em.persist(patients2);
}
}
}finally {
if (em != null)
em.close();
}
并且堆栈跟踪是
WARNING: /CreateSchedule
java.lang.IllegalArgumentException: sentTime: org.joda.time.DateTime is not a supported property type.
at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedSingleValue(DataTypeUtils.java:235)
at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:207)
at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:173)
at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:148)
at com.google.appengine.api.datastore.PropertyContainer.setProperty(PropertyContainer.java:101)
at com.google.appengine.datanucleus.EntityUtils.setEntityProperty(EntityUtils.java:174)
at com.google.appengine.datanucleus.StoreFieldManager.storeFieldInEntity(StoreFieldManager.java:360)
at com.google.appengine.datanucleus.StoreFieldManager.storeObjectField(StoreFieldManager.java:190)
at org.datanucleus.state.AbstractStateManager.providedObjectField(AbstractStateManager.java:1447)
at healith.Tasks.jdoProvideField(Tasks.java)
at healith.Tasks.jdoProvideFields(Tasks.java)
at org.datanucleus.state.AbstractStateManager.provideFields(AbstractStateManager.java:1515)
at com.google.appengine.datanucleus.DatastorePersistenceHandler.insertObjectsInternal(DatastorePersistenceHandler.java:241)
at com.google.appengine.datanucleus.DatastorePersistenceHandler.insertObject(DatastorePersistenceHandler.java:218)
at org.datanucleus.state.JDOStateManager.internalMakePersistent(JDOStateManager.java:2381)
at org.datanucleus.state.JDOStateManager.flush(JDOStateManager.java:3778)
...
答案 0 :(得分:3)
我在我的项目中使用Objectify,并且有一种方法可以将Joda DateTime作为实体属性。
import com.googlecode.objectify.impl.translate.opt.joda.JodaTimeTranslators;
// immediately before your entity registrations
JodaTimeTranslators.add(factory());
答案 1 :(得分:2)
如果您查看错误,您会看到在将实体存储到数据库时,它会抱怨Joda的DateTime
不是受支持的属性类型之一。
对于GAE上的JPA,supported property types是:basic DB types之一,Collection
这些基本类型或其他实体。
答案 2 :(得分:1)
DataNucleus项目(由GAE JDO / JPA使用)有一个插件,用于保存这些类型。也许你可以把它放在CLASSPATH中。 http://www.datanucleus.org/plugins/store.types.jodatime.html
可从Maven central下载。为您使用的GAE版本选择最合适的版本。把它放在CLASSPATH就是你所做的一切。如果您遇到问题,请查看LOG,因为它会说明该插件是否在运行时注册。