Morphia выдает: «Generic TypeVariable не поддерживается» при попытке сериализации Setно отлично работает для сотрудника <O> - PullRequest
0 голосов
/ 02 июля 2019

У меня есть сущность, которую я хочу сохранить в 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)
...