У меня есть следующее лицо:
@Entity("platform_defs")
class PlatformDef {
@Id
Long id
@Property("name")
String name
@Property("abbreviation")
String abbreviation
@Property("type")
String type
@Property("hg_repo")
String hgRepo
@Property("port")
Long port
@Property("status")
String status
}
И следующий код Morphia пытается сохранить экземпляр этого объекта:
public void savePlatformDef(PlatformDef pDef) {
try {
AppConfig config = getConfig();
String dbName = config.getMongo().getDatabaseName();
Mongo mongo = new Mongo(config.getMongo().getHost(), config.getMongo().getPort());
morphia = new Morphia();
datastore = morphia.createDatastore(mongo, dbName);
morphia.map(PlatformDef.class);
datastore.save(pDef);
} catch(Throwable t) {
System.out.println(t.getMessage());
}
}
Когда я запускаю это, я получаю:
java.lang.StackOverflowError
Вот рекурсивный список вызовов:
at org.mongodb.morphia.mapping.EmbeddedMapper(toDBObject:40)
at org.mongodb.morphia.mapping.Mapper(writeMappedField:642)
at org.mongodb.morphia.mapping.Mapper(toDBObject:544)
at org.mongodb.morphia.mapping.Mapper(toDBObject:526)
Этот образец повторяется снова и снова... Что случилось с моей настройкой?
Возможно, слишком поздно, чтобы помочь вам, но я столкнулся с этим вопросом. Я не могу сказать из того, что вы указали в коде, но, скорее всего, вы используете анонимный внутренний класс в какой-то момент в конструкции платформы Def, которую вы передаете вашему методу savePlatformDef. По-видимому, морфия не поддерживает анонимные внутренние классы, они, как известно, вызывают переполнение стека именно так. См. Эту ошибку:
https://github.com/mongodb/morphia/issues/402
Надеюсь, этот ответ поможет другим, как я, в будущем :)
@Id
MongoClient
вместо Mongo
, который устарел/уже удален в зависимости от вашей версии драйвера Mongo Java