我一直试图用Morphia来保存POJO,但是没有运气。我有以下简单的代码:
final Morphia morphia = new Morphia();
morphia.mapPackage("entities.users");
final Datastore datastore = morphia.createDatastore(new MongoClient(), "test_table");
datastore.ensureIndexes();
datastore.save(user);
但是,奇怪的是
datastore.ensureIndexes()
抛出了一个奇怪的内部异常,该异常取决于Morphia:WARNING: Parameterized types are treated as untyped Objects. See field 'assertionLock' on class java.lang.ClassLoader
org.mongodb.morphia.mapping.MappingException: Cannot use non-static inner class: class java.security.ProtectionDomain$Key. Please make static.
at org.mongodb.morphia.mapping.MappedClass.basicValidate(MappedClass.java:495)
at org.mongodb.morphia.mapping.MappedClass.<init>(MappedClass.java:123)
at org.mongodb.morphia.mapping.Mapper.getMappedClass(Mapper.java:451)
at org.mongodb.morphia.DatastoreImpl.processEmbeddedAnnotations(DatastoreImpl.java:1545)
at org.mongodb.morphia.DatastoreImpl.ensureIndexes(DatastoreImpl.java:1185)
at org.mongodb.morphia.DatastoreImpl.processEmbeddedAnnotations(DatastoreImpl.java:1545)
at org.mongodb.morphia.DatastoreImpl.ensureIndexes(DatastoreImpl.java:1185)
at org.mongodb.morphia.DatastoreImpl.processEmbeddedAnnotations(DatastoreImpl.java:1545)
at org.mongodb.morphia.DatastoreImpl.ensureIndexes(DatastoreImpl.java:1185)
at org.mongodb.morphia.DatastoreImpl.processEmbeddedAnnotations(DatastoreImpl.java:1545)
at org.mongodb.morphia.DatastoreImpl.ensureIndexes(DatastoreImpl.java:1185)
at org.mongodb.morphia.DatastoreImpl.processEmbeddedAnnotations(DatastoreImpl.java:1545)
at org.mongodb.morphia.DatastoreImpl.ensureIndexes(DatastoreImpl.java:1185)
at org.mongodb.morphia.DatastoreImpl.processEmbeddedAnnotations(DatastoreImpl.java:1545)
at org.mongodb.morphia.DatastoreImpl.ensureIndexes(DatastoreImpl.java:1185)
at org.mongodb.morphia.DatastoreImpl.processEmbeddedAnnotations(DatastoreImpl.java:1545)
at org.mongodb.morphia.DatastoreImpl.ensureIndexes(DatastoreImpl.java:1185)
at org.mongodb.morphia.DatastoreImpl.ensureIndexes(DatastoreImpl.java:1167)
at org.mongodb.morphia.DatastoreImpl.ensureIndexes(DatastoreImpl.java:1189)
at org.mongodb.morphia.DatastoreImpl.ensureIndexes(DatastoreImpl.java:274)
at org.mongodb.morphia.DatastoreImpl.ensureIndexes(DatastoreImpl.java:266)
at repositories.UsersRepository.createUser(UsersRepository.java:65)
at repositories.UsersRepository.main(UsersRepository.java:101)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Process finished with exit code 0
最佳答案
在某种程度上,您正在尝试序列化一个java.security.ProtectionDomain$Key
实例,Morphia和驱动程序都不知道该实例。您需要编写Converter
来管理该类型。
关于java - 保存基本实体时Morphia抛出内部异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39412637/