我正在开发我的第一个Java,MongoDB,Morphia应用程序,并且无法解决以下异常: -为什么会发生此异常 - java.lang.ClassCastException:java.lang.String不能转换为com.mongodb.DBObject
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);
}
,我是用我的注释两个实体类做了哪些错误?
我猜它与嵌入式Child类有关,因为堆栈跟踪提到了org.mongodb.morphia.mapping.EmbeddedMapper
。
我觉得奇怪的是,我还没有chnaged父类和/或孩子类,我的所有测试都用于传递正常。
今天我重新运行我的测试,他们已经开始抛出这个异常。
我相信你是对的。正如我通过创建一个新的数据库并重新填充新的测试数据来“证明”这一点,它一切正常。有什么方法可以识别原始数据库中的损坏数据吗? – Hector
不知道你会如何识别损坏的数据,但只要你通过应用程序保存和提取,你应该没问题。 – Veeram