Трудно точно сказать, что здесь происходит, но я могу предложить некоторые идеи и посмотреть, приведут ли они вас куда-нибудь. Для ошибок отсутствующих ссылок вероятна одна из двух следующих вещей:
- Ссылочный документ / объект был удален с момента сохранения этой ссылки. MongoDB не обеспечивает ссылочную целостность, так что на практике это происходит довольно неплохо, я думаю.
- Указанное значение идентификатора фактически не существует в базе данных, поскольку оно никогда не сохранялось. Morphia требует, чтобы ссылочные объекты имели идентификатор перед сохранением ссылочной сущности. Это связано с тем, что Morphia необходимо это значение идентификатора для записи в документ для сохранения ссылки. Как правило, это значение идентификатора генерируется при сохранении референта. Однако в некоторых случаях (например, тип идентификатора не
ObjectId
) этот идентификатор вручную устанавливается на референте. В этом случае можно затем сохранить ссылающуюся сущность, поскольку у референта есть значение идентификатора в объекте, даже если этот референт никогда не был сохранен. В этом случае у вас по существу будет ссылка на ничто, и вы получите эту ошибку.
Если сущность фактически была просто удалена после сохранения ссылки, и это хорошо, вы действительно можете сказать Morphia игнорировать отсутствующие ссылки в самой аннотации @Reference
* 1012. *.
Что касается переполнения стека, кажется, что у вас есть oop во встроенном поля, и поэтому вы можете убедиться, что вы правильно настраиваете свою модель. Morphia не поддерживает подобные циклы, поэтому разработчик обязан не допустить их возникновения.