我正在开发我的第一个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;
}
。
我觉得很奇怪的是,无论如何我还没有完成家长和/或儿童课程,而且我所有的测试过去都很好。
今天我重新开始测试并开始抛出这个异常。
答案 0 :(得分:3)
我认为问题是存储在子字段中的数据。你有一些不好的数据。如果我不得不猜测,因为我无法查看数据,你就会看到像
这样的数据的子字段“孩子”:“somestring”
这将解释为什么你会收到特定类型的类强制转换异常。
答案 1 :(得分:0)
我遇到了同样的问题。我认为mongo不会将字符串数据类型视为对象。如果存储在mongo中的数据是string类型,而关联的Java变量类型为Object
,则无法转换该变量并抛出此异常。
在我的情况下,问题是我在ArrayList<String>
变量中添加了Object
,而且morphia将其作为String
(ArrayList
添加到了Mongo中单值似乎被解释为单个字符串)。导致异常阻止加载Java对象。