为什么会出现此异常 - java.lang.ClassCastException:java.lang.String无法强制转换为com.mongodb.DBObject

时间:2016-12-08 11:01:17

标签: java mongodb morphia

我正在开发我的第一个Java,MongoDB,Morphia应用程序,无法解决以下异常: -

String

My Tech Stack如下: -

TreeMap<String, List<Double>> priceSortedMap = new TreeMap<>(new Comparator<String>() {

            @Override
            public int compare(String o1, String o2) {
                //get first entry (movie price) of list and compare.
                if(map.get(o1).get(0) <= map.get(o2).get(0)){
                    return 1;
                }
                return -1;
            }

        });
 // put all entries from old map to new         
       priceSortedMap.putAll(map);

我的父母实体课程: -

java.lang.RuntimeException: java.lang.ClassCastException: java.lang.String cannot be cast to com.mongodb.DBObject
    at org.mongodb.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:74)
    at org.mongodb.morphia.mapping.Mapper.readMappedField(Mapper.java:797)
    at org.mongodb.morphia.mapping.Mapper.fromDb(Mapper.java:250)
    at org.mongodb.morphia.mapping.Mapper.fromDBObject(Mapper.java:191)
    at org.mongodb.morphia.query.MorphiaIterator.convertItem(MorphiaIterator.java:134)
    at org.mongodb.morphia.query.MorphiaIterator.processItem(MorphiaIterator.java:146)
    at org.mongodb.morphia.query.MorphiaIterator.next(MorphiaIterator.java:117)
    at org.mongodb.morphia.query.QueryImpl.asList(QueryImpl.java:150)
    at test.DatabaseManagerTest.testListParent(DatabaseManagerTest.java:172)

我的孩子实体: -

Java 8 jdk1.8.0_112
Morphia 1.2.1
Mongo java driver 3.2.2

失败的JUNIT代码: -

@Entity("parent")
public class Parent {

    @Id
    private ObjectId id;

    @Indexed(options = @IndexOptions(unique = false))
    private Child child;

    private String comment;

    private Date updateTimestamp;

}

我在注释我的两个实体类时犯了什么错误?

我猜它与嵌入式Child类有关,因为堆栈跟踪提到了@Embedded public class Child { private int value; private String name; }

我觉得很奇怪的是,无论如何我还没有完成家长和/或儿童课程,而且我所有的测试过去都很好。

今天我重新开始测试并开始抛出这个异常。

2 个答案:

答案 0 :(得分:3)

我认为问题是存储在子字段中的数据。你有一些不好的数据。如果我不得不猜测,因为我无法查看数据,你就会看到像

这样的数据的子字段
  

“孩子”:“somestring”

这将解释为什么你会收到特定类型的类强制转换异常。

答案 1 :(得分:0)

我遇到了同样的问题。我认为mongo不会将字符串数据类型视为对象。如果存储在mongo中的数据是string类型,而关联的Java变量类型为Object,则无法转换该变量并抛出此异常。

在我的情况下,问题是我在ArrayList<String>变量中添加了Object,而且morphia将其作为StringArrayList添加到了Mongo中单值似乎被解释为单个字符串)。导致异常阻止加载Java对象。