我可以将具有 LocalDateTime 字段的实体保存到数据存储区。但是,我正在尝试查询具有 LocalDateTime 字段的实体。当我创建查询并调用 asList 方法时,会引发以下异常:
java.lang.RuntimeException: org.mongodb.morphia.mapping.MappingException: No usable constructor for java.time.LocalDateTime
当将实体从 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");
}
}
Morphia 目前不支持 Java 8 日期/时间类型。目前有一个新模块正在代码审查中,希望在 1.3 版本中添加此支持。