У меня есть сущность, которую я хочу сохранить в MongoDb, используя Morphia.
В этом классе я использую объект общего типа, который легко разрешается Morphia, но когда я использую Set / List того же общего объекта, Morphiaвыдает следующее сообщение об ошибке:
'java.lang.RuntimeException: Generic TypeVariable not supported!'
При попытке сохранить это в MongoDB с помощью Morphia я могу успешно сохранить 'Employee employeeOrder', но 'Set> orderDetails' выдает ошибку.
Когда япопробуйте сохранить тот же объект универсального набора, как показано ниже, тогда Morphia может легко разрешить его при сохранении и получении:
Set<Employee<? extends IOrder>>
Я посмотрел на 'MappedField.java' Morphia, который выдает эту ошибку, и кажется, что причинаошибка в том, что Morphia правильно распознает «тип» каждой переменной-члена моего класса Entity, за исключением случаев, когда его Set>.
Он не распознает ни «instanceof ParameterizedType», ни «instanceof WildcardType».
Я использую Morphia 1.3.2 в настоящее время.Я не уверен, исправлена ли эта ошибка в более новых версиях или я что-то делаю неправильно.
Мой класс сущности:
@Entity
class Employee<O extends IOrder> {
.
.
@org.mongodb.morphia.annotations.Embedded
private Employee<O> employeeOrder;
.
.
@org.mongodb.morphia.annotations.Embedded
private Set<Employee<O>> orderDetails = Sets.newHashSet();
}
Подводя итог: Морфия может разрешить тип 'O'в Employee, но не в состоянии понять тип того же' O 'в Set> и выдает ошибку ниже:
java.lang.RuntimeException: Generic TypeVariable not supported!
at org.mongodb.morphia.mapping.MappedField.toClass(MappedField.java:639)
at org.mongodb.morphia.mapping.EphemeralMappedField.getSubClass(EphemeralMappedField.java:84)
at org.mongodb.morphia.mapping.EphemeralMappedField.<init>(EphemeralMappedField.java:39)
at org.mongodb.morphia.mapping.MappedField.discoverType(MappedField.java:521)
at org.mongodb.morphia.mapping.MappedField.discover(MappedField.java:488)
at org.mongodb.morphia.mapping.MappedField.<init>(MappedField.java:111)
at org.mongodb.morphia.mapping.MappedClass.discover(MappedClass.java:582)
at org.mongodb.morphia.mapping.MappedClass.<init>(MappedClass.java:144)
at org.mongodb.morphia.mapping.Mapper.getMappedClass(Mapper.java:484)
at org.mongodb.morphia.mapping.MappedClass.discover(MappedClass.java:543)
at org.mongodb.morphia.mapping.MappedClass.<init>(MappedClass.java:144)
at org.mongodb.morphia.mapping.Mapper.getMappedClass(Mapper.java:484)
at org.mongodb.morphia.DatastoreImpl.getWriteConcern(DatastoreImpl.java:1554)
at org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.java:1116)