我有一个实体,要使用Morphia保存在MongoDb中。
在此类中,我使用Morphia容易解析的通用类型对象,但是当我使用同一通用对象的Set / List时,Morphia给出以下错误:
'java.lang.RuntimeException: Generic TypeVariable not supported!'
当尝试使用Morphia将其保存到MongoDB时,我能够成功保存“ Employee employeeOrder”,但“ Set> orderDetails”给出了错误。
当我尝试保存以下相同的通用对象集时,Morphia可以在保存和获取时轻松解决该问题:
Set<Employee<? extends IOrder>>
我查看了Morphia的'MappedField.java',它引发了此错误,并且似乎导致错误的原因是Morphia正确识别了我的Entity类的每个成员变量的'type',除非它的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();
}
总结一下: Morphia能够解析Employee中'O'的类型,但无法理解Set>中相同'O'的类型,并抛出以下错误:
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)