在mongodb中使用ISODate和play morphia

在mongodb中使用ISODate和play morphia,mongodb,playframework,morphia,Mongodb,Playframework,Morphia,我想将值的日期类型保存到mongodb,作为ISODate或任何类似的日期类型,并使用play morphia。但是,当我尝试将以下类保存到mongodb时,它在lastcheckin上抛出一个异常。当我把它的类型改为String时,效果很好。是因为我没有在JAVA中使用正确的数据类型映射到mongodb中的ISODate吗 @Entity(value = "devices", noClassnameStored = true) public class Device { public

我想将值的日期类型保存到mongodb,作为ISODate或任何类似的日期类型,并使用play morphia。但是,当我尝试将以下类保存到mongodb时,它在lastcheckin上抛出一个异常。当我把它的类型改为String时,效果很好。是因为我没有在JAVA中使用正确的数据类型映射到mongodb中的ISODate吗

@Entity(value = "devices", noClassnameStored = true)
public class Device {
    public String ip;
    public String mac;
    public Date lastcheckin;
}
将当前日期指定给lastcheckin属性

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
        device.lastcheckin = sdf.parse(Calendar.getInstance().getTime().toString());
    }
catch (ParseException e){
        PlayLogger.instance().info(e.getMessage());
}
找到了下面的线索

Caused by: java.lang.RuntimeException: java.lang.IllegalArgumentException
    at com.google.code.morphia.mapping.ValueMapper.fromDBObject(ValueMapper.java:27)
    at com.google.code.morphia.mapping.Mapper.readMappedField(Mapper.java:497)
    at com.google.code.morphia.mapping.Mapper.fromDb(Mapper.java:480)
    ... 51 more
Caused by: java.lang.IllegalArgumentException
    at java.util.Date.parse(Date.java:615)
    at com.google.code.morphia.converters.DateConverter.decode(DateConverter.java:32)
    at com.google.code.morphia.converters.DefaultConverters.fromDBObject(DefaultConverters.java:129)
    at com.google.code.morphia.mapping.ValueMapper.fromDBObject(ValueMapper.java:25)
    ... 53 more

一般来说,只要是java.util.Date就可以了


PS:公共属性应设置为private/protected加上getter和setter。

如果您需要帮助修复/诊断异常,它有助于提供实际的堆栈跟踪。我不确定您为什么要做所有这些跟踪/解析工作。device.lastcheckin=新日期应该可以正常工作。@Evancholy,我想用正确的格式存储日期。日期作为日期时没有格式。格式设置仅适用于字符串化显示表单。看起来你在做毫无意义的工作。好的,这是一个古老的版本,请更新到。您正在代码中显示字符串版本,对吗?