为什么会发生此异常-java.lang.ClassCastException:java.lang.String无法强制转换为com.mongodb.DBObject
我正在开发我的第一个Java、MongoDB和Morphia应用程序,无法解决以下异常:-为什么会发生此异常-java.lang.ClassCastException:java.lang.String无法强制转换为com.mongodb.DBObject,java,mongodb,morphia,Java,Mongodb,Morphia,我正在开发我的第一个Java、MongoDB和Morphia应用程序,无法解决以下异常:- 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)
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
我的父实体类:-
@Entity("parent")
public class Parent {
@Id
private ObjectId id;
@Indexed(options = @IndexOptions(unique = false))
private Child child;
private String comment;
private Date updateTimestamp;
}
我的孩子实体:-
@Embedded
public class Child {
private int value;
private String name;
}
失败的JUNIT代码:-
final Datastore datastore = DatabaseManager.getDatastore();
final Query<Parent> query = datastore.createQuery(Parent.class);
final List<Parent> parents = query.asList(); <<<< EXCEPTION OCCURS HERE
for (Parent parent : parents) {
Assert.assertNotNull(parent);
}
final Datastore Datastore=DatabaseManager.getDatastore();
最终查询=datastore.createQuery(Parent.class);
final List parents=query.asList() 我认为问题在于存储在子字段中的数据。你有一些坏数据。如果我不得不猜测,因为我看不到数据,你有一个子字段,数据如下
“child”:“somestring”
这将解释为什么您会收到特定类型的类强制转换异常。我遇到了同样的问题。我认为Mango不把字符串数据类型当作一个对象。如果mongo中存储的数据类型为string,而关联的Java变量类型为Object
,则无法强制转换该变量,并引发此异常
在我的例子中,问题是我在对象
变量中放置了一个ArrayList
,morphia将其作为字符串
插入Mongo(具有单个值的ArrayList
似乎被解释为单个字符串)。导致异常,从而阻止加载Java对象。我相信您是正确的。正如我通过创建一个新的数据库和重新填充新的测试数据“证明”的那样,一切都很好。有什么方法可以识别原始数据库中损坏的数据吗?不确定您将如何识别损坏的数据,但只要您通过应用程序保存和获取数据,您就可以了。