我正在開發我的第一個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