我已经建立了一个简单的数据存储来存储版本和构建。这是他们的课程-
@Entity("Version")
public class Version {
@Id
private ObjectId id = new ObjectId();
public Version() {}
private String name;
}
@Entity("Build")
public class Build {
public Build() {}
@Id
ObjectId id = new ObjectId();
@Reference
Version version;
String name;
}
(实现了 getter、setter、构造函数和 toString 的类中的字段)。
现在我尝试先存储版本,然后尝试存储构建,然后读取所有存在的构建。
Version version = new Version("first");
Version version2 = new Version("second");
VersionDAO.saveVersion(version);
VersionDAO.saveVersion(version2);
VersionDAO.printAllVersions();
Build build = new Build(version, "Hello");
BuildDAO.saveBuild(build);
BuildDAO.getAllBuilds();
VersionDAO.getAllVersions()
工作正常,让我得到存储的版本列表,但BuildDAO.getAllBuilds()
抛出一个错误说 -
线程“主”dev.morphia.mapping.MappingException 中的异常:无法映射trying_morphia.Build,ID:602f4e9ff760cd5638698273 在数据库“构建”中
引起:dev.morphia.mapping.MappingException:无法为try_morphia.Build.version获取引用({“$ref”:“Version”,“$id”:“602f4e7b96f28d54bd1cc883”})
似乎有一些我似乎无法弄清楚的参考链接问题。我必须使用@Reference,因为这段代码是更大部分的一部分,我不能改变它的全部。
MongoDB Compass 将 Build 条目的值显示为 -
_id: ObjectId("602f4e9ff760cd5638698273")
className: "trying_morphia.Build"
version: DBRef(Version, 602f4e7b96f28d54bd1cc883, undefined)
name:"Hello"
我在参考中遗漏了什么?
我尝试过的:将版本和构建的 id 更改为字符串。