我可以将具有LocalDateTime字段的实体保存到数据存储区。然而, 我试图查询具有LocalDateTime字段的实体。当我创建一个查询并调用asList方法时,抛出以下异常:
java.lang.RuntimeException: org.mongodb.morphia.mapping.MappingException: No usable constructor for java.time.LocalDateTime
答案 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版本中添加此支持,希望如此。