无法在MongoDB上具有LocalDateTime字段的实体上创建查询

时间:2016-07-22 10:23:30

标签: mongodb morphia localdate nosql

我可以将具有LocalDateTime字段的实体保存到数据存储区。然而, 我试图查询具有LocalDateTime字段的实体。当我创建一个查询并调用asList方法时,抛出以下异常:

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

2 个答案:

答案 0 :(得分: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");
    }
}

答案 1 :(得分:0)

目前,Morphia目前还没有支持Java 8日期/时间类型。目前正在进行代码审查的新模块将在1.3版本中添加此支持,希望如此。