Morphia / Mongo не может связать @Reference, выдавая: ссылка не может быть извлечена

#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. Вам нужно будет управлять этими ссылками вручную.