使用Morphia将通用列表映射到MongoDB

时间:2017-09-04 09:04:25

标签: java mongodb generics morphia

我想使用MongoDB Java驱动程序(v3.4.2)和Morphia(v 1.3.2)将包含通用列表的通用对象映射到MongoDB,如下所示:

public class KPI<T> {

    public ArrayList<T> kpiList;
}

我用过

Morphia morphia = new Morphia();
morphia.map(KPI.class);

映射该类,当我尝试使用

将名为 someKPIObject 对象的KPI实例添加到Mongodb时
MongoClient mongoClient = new MongoClient(addr);
AdvancedDatastore datastore = (AdvancedDatastore) morphia.createDatastore(mongoClient, "myDB");
datastore.insert(myDoc,someKPIObject);

我收到以下错误:

  

警告:参数化类型被视为无类型对象。见字段   &#39; kpiList&#39;关于KPI课程   org.mongodb.morphia.mapping.MappingException:   错误映射字段:KPI.kpiList at   org.mongodb.morphia.mapping.Mapper.toDBObject(Mapper.java:984)at at   org.mongodb.morphia.mapping.Mapper.toDBObject(Mapper.java:593)at at   org.mongodb.morphia.DatastoreImpl.entityToDBObj(DatastoreImpl.java:1362)     在org.mongodb.morphia.DatastoreImpl.insert(DatastoreImpl.java:1227)     在org.mongodb.morphia.DatastoreImpl.insert(DatastoreImpl.java:1046)     在mongoconnector.MongoConnector.AddNewEntry(MongoConnector.java:97)     在Parser.main(Parser.java:31)

     

引起:   java.lang.RuntimeException:Generic TypeVariable不受支持! at   org.mongodb.morphia.mapping.MappedField.toClass(MappedField.java:639)     在   org.mongodb.morphia.mapping.MappedField.getSubClass(MappedField.java:313)     在   org.mongodb.morphia.mapping.EmbeddedMapper.shouldSaveClassName(EmbeddedMapper.java:29)     在   org.mongodb.morphia.mapping.EmbeddedMapper.writeCollection(EmbeddedMapper.java:242)     在   org.mongodb.morphia.mapping.EmbeddedMapper.toDBObject(EmbeddedMapper.java:90)     在   org.mongodb.morphia.mapping.Mapper.writeMappedField(Mapper.java:876)     在org.mongodb.morphia.mapping.Mapper.toDBObject(Mapper.java:982)     ......还有6个

我做错了什么,甚至可能吗?我使用Java 1.8。

1 个答案:

答案 0 :(得分:0)

Morphia不支持在DB中保存泛型,因此,您可以尝试创建一个简单的界面,然后让您想要保存的所有类实现它,或类似的东西。

他们有与您的问题 1 2

相关的未决问题

另外,您使用哪种Morphia / MongoDB / Java版本?