【问题标题】:Cannot create a query on an entity that has LocalDateTime field on MongoDB无法在 MongoDB 上具有 LocalDateTime 字段的实体上创建查询
【发布时间】:2016-11-26 05:10:58
【问题描述】:

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

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

【问题讨论】:

    标签: mongodb morphia localdate nosql


    【解决方案1】:

    Morphia 在将实体从 MongoDB 映射到 Java 对象时依赖默认构造函数,因为 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");
        }
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2011-06-18
        • 1970-01-01
        • 2021-04-24
        • 2013-09-29
        • 2017-01-17
        • 2018-09-30
        • 2018-04-21
        • 1970-01-01
        • 2017-11-29
        相关资源
        最近更新 更多