3

我可以将具有 LocalDateTime 字段的实体保存到数据存储区。但是,我正在尝试查询具有 LocalDateTime 字段的实体。当我创建查询并调用 asList 方法时,会引发以下异常:

java.lang.RuntimeException: org.mongodb.morphia.mapping.MappingException: No usable constructor for java.time.LocalDateTime
4

2 回答 2

1

当将实体从 MongoDB 映射到 Java 对象时,Morphia 依赖默认构造函数,因为 java.time.LocalDateTime 类没有它会引发异常。

您可以使用@PreLoad 生命周期注释来转换数据,如下所示:

@Entity
public class MyEntity {
    public MyEntity() {

    }

    @Id
    private ObjectId id;
    private LocalDateTime localDateTime;

    @PreLoad
    public void preLoad(DBObject obj) {
        BasicDBObject object = (BasicDBObject) obj.get("localDateTime");
        BasicDBObject date = (BasicDBObject) object.get("date");
        BasicDBObject time = (BasicDBObject) object.get("time");
        localDateTime = LocalDateTime.of(date.getInt("year"),
                                         date.getInt("month"),
                                         date.getInt("day"),
                                         time.getInt("hour"),
                                         time.getInt("minute"),
                                         time.getInt("second"),
                                         time.getInt("nano"));
        obj.removeField("localDateTime");
    }
}
于 2016-07-22T15:07:50.523 回答
0

Morphia 目前不支持 Java 8 日期/时间类型。目前有一个新模块正在代码审查中,希望在 1.3 版本中添加此支持。

于 2016-07-25T14:23:28.157 回答