【问题标题】:use ISODate in mongodb with play morphia在 mongodb 中使用 ISODate 和 play morphia
【发布时间】:2014-09-02 18:51:53
【问题描述】:

我想将 Date 类型的值保存到 mongodb 作为 ISODate 或任何具有 play-morphia 的类似日期类型。但是,当我尝试将以下类保存到 mongodb 时,它会在 lastcheckin 上引发异常。当我将其类型更改为字符串时,它工作正常。是不是因为我没有在 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

【问题讨论】:

  • 如果您需要帮助修复/诊断异常,提供实际的堆栈跟踪会有所帮助。
  • 我不确定你为什么要做所有 toString()/parse() 工作。 device.lastcheckin = new Date() 应该可以正常工作。
  • @evanchooly,我想以正确的格式存储日期。
  • 日期是日期时没有格式。格式化仅适用于字符串化的显示表单。看来你在那里做着毫无意义的工作。

标签: mongodb playframework morphia


【解决方案1】:

只要是java.util.Date,这应该没问题。

PS:public 属性应该是 private / protected 加上 getter 和 setter。

【讨论】:

  • 好的,这是一个古老的版本,请更新到github.com/mongodb/morphia。而且您在代码中显示字符串版本,对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多