#mongodb #morphia #mongorestore #dbref
#mongodb #morphia #mongorestore #dbref
Вопрос:
Я настроил простое хранилище данных для хранения версии и сборки. Вот их классы-
@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;
}
(поля в классах имеют свои геттеры, сеттеры, конструкторы и 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()
выдает сообщение об ошибке-
Исключение в потоке «main» dev.morphia.mapping.Исключение MappingException: не удалось сопоставить trying_morphia.Сборка с идентификатором: 602f4e9ff760cd5638698273 в базе данных «Сборки»
Вызвано: dev.morphia.mapping .Исключение MappingException: ссылка ({ «$ref»: «Version», «$id»: «602f4e7b96f28d54bd1cc883» }) не может быть извлечена для trying_morphia.Build.version
Похоже, есть какая-то проблема со ссылками, которую я, похоже, не могу понять. Я должен использовать @Reference, поскольку этот фрагмент кода является частью большего фрагмента, и я не могу изменить его целиком.
MongoDB Compass показывает значение записи сборки как-
_id: ObjectId("602f4e9ff760cd5638698273")
className: "trying_morphia.Build"
version: DBRef(Version, 602f4e7b96f28d54bd1cc883, undefined)
name:"Hello"
Чего мне не хватает в ссылке?
Что я пробовал: изменение идентификатора как версии, так и сборки на string.
Комментарии:
1. Похоже, версия и сборка были в отдельной БД. Копирование коллекции в другую базу данных работало для локальной небольшой копии кода, нужно найти способ ссылки, чтобы найти коллекцию в какой-либо другой базе данных.
Ответ №1:
Перекрестные ссылки на базы данных не поддерживаются в Morphia. Вам нужно будет управлять этими ссылками вручную.