3

嗨,我刚开始使用 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)

...

4

3 回答 3

3

我在我的项目中使用 Objectify,并且有一种方法允许 Joda DateTime 作为实体属性。

import com.googlecode.objectify.impl.translate.opt.joda.JodaTimeTranslators;

// immediately before your entity registrations
JodaTimeTranslators.add(factory());
于 2013-11-08T03:45:42.770 回答
2

如果您查看错误,您会发现当将实体存储到数据库中时,它会抱怨 Joda'sDateTime不是受支持的属性类型之一。

对于 GAE 上的 JPA,支持的属性类型是:基本 DB 类型之一、Collection这些基本类型中的一个或另一个实体。

于 2013-11-04T06:45:23.837 回答
1

DataNucleus 项目(由 GAE JDO/JPA 使用)有一个用于持久保存此类类型的插件。也许你可以把它放在 CLASSPATH 中。 http://www.datanucleus.org/plugins/store.types.jodatime.html

可从Maven 中心下载。为您使用的 GAE 版本选择最合适的版本。把它放在 CLASSPATH 中就是你所做的一切。如果您有问题,请查看 LOG,因为它会说明该插件是否在运行时注册。

于 2013-11-04T14:00:17.677 回答