当前位置: 首页 > 知识库问答 >
问题:

在Morphia和MongoDB中使用泛型

秋阳荣
2023-03-14

简短说明:

我在将mongo DB中的文档读入具有泛型属性的java类时遇到了困难。错误显示java.lang.double不能强制转换为com.mongodb.dbobject

@Getter @Setter @NoArgsConstructor @Entity("randomDataCollection")
public class RandomDataCollection {

    @Id
    private ObjectId id = new ObjectId();

    private String name;

    @Embedded
    private MyGenericProperty<Float> temperatureMumbai;

}
@Getter @Setter @NoArgsConstructor
public class MyGenericProperty<T> {

    private T value;

    private String unit;

}
MyGenericProperty<Float> temperatureMumbai = new MyGenericProperty<Float>();
temperatureMumbai.setValue(32.8f);
temperatureMumbai.setUnit("°C");

RandomDataCollection randomData = new RandomDataCollection();
randomData.setName("RandomData0711");
randomData.setTemperatureMumbai(temperatureMumbai);

Datastore datastore = getDatastore();
datastore.save(randomData);

...但是当我试着从数据库里读...

randomData = datastore.find(RandomDataCollection.class).filter("name =", "RandomData0711").get();

...我得到以下异常:

Caused by: java.lang.ClassCastException: java.lang.Double cannot be cast to com.mongodb.DBObject

我确实发现了一些关于泛型和morphia的讨论,但老实说,我不知道如何将这些应用到我的问题上。

我在运行Morphia 1.5.8

共有1个答案

罗业
2023-03-14

几乎可以肯定有更好的方法来做到这一点,但这对我很有效。

DBCursor cursor = datastore.find(RandomDataCollection.class).filter("name =", name).fetch().getCursor();
List<RandomDataCollection> list = new ArrayList<>();
while (cursor.hasNext()) {
    DBObject theObj = cursor.next();
    RandomDataCollection rec = new RandomDataCollection();
    rec.setId((ObjectId)theObj.get("_id"));
    MyGenericProperty<Float> temperatureMumbai = new MyGenericProperty<Float>();
    BasicDBObject x = (BasicDBObject)theObj.get("temperatureMumbai");
    temperatureMumbai.setValue(x.getFloat("value"));
    temperatureMumbai.setUnit(x.getString("unit"));
    rec.setTemperatureMumbai(temperatureMumbai);
    list.add(rec);
}
 类似资料:
  • 当我尝试将一个名为someKPIObject对象的KPI实例添加到Mongodb时,使用 我得到以下错误: 警告:参数化类型被视为非类型化对象。请参见类KPI org.mongodb.morphia.mapping.mapping.mapping.mapping.mapper.todbobject(mapper.java:984)在org.mongodb.morphia.mapping.mappe

  • 我发现了这篇文章,其中讨论了是否应该建立文档之间的引用。我想注释我的类,以便在文档中创建引用: 这里,列表先决条件的对象具有对列表BS的对象的引用。在中可能吗?它是如何被称为的(我无法使用关键字“嵌入引用”和“文档内引用”找到任何信息。)Morphia的解决方案会是什么样子? 编辑:我知道引用注释,但它似乎引用了anoter集合,而不是同一个文档中的对象列表。我只想确保序列化的java对象被正确地

  • 我正在开发一个Java的Restful Web应用程序,并计划将MongoDB与吗啡用作ODM。由于我是MongoDB的新手,我需要一些建议。 > 处理db连接的最佳方法是使用db连接池,mongoClient负责处理。 所以我需要重用上面的数据存储,而不是在每次请求时创建一个新实例,因为它会浪费大量资源并影响性能。我应该将上述实现为单例类吗?有人能帮我解决这个问题吗?

  • 我试图使用Morphia从使用Mongo V3.6.4的mongodb.Im中读取内容。我已经添加了Morphia依赖关系: 现在我尝试连接到我的MongoDB: Mongo肯定是像我以前的连接代码一样运行...

  • 我有mongodb聚合查询,它在shell中工作得很好。如何重写此查询以便与morphia一起使用? 只接受一个字段名,但我需要向该集合添加对象。

  • 所以我开始和Morphia一起工作,我遇到了一个奇怪的问题。 get(moviedetails.class,id) 我得到null 当我使用: