2016-12-08 81 views
0

我正在開發我的第一個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父類和/或孩子類,我的所有測試都用於傳遞正常。

今天我重新運行我的測試,他們已經開始拋出這個異常。

回答

2

我認爲問題是存儲在子字段中的數據。你有一些不好的數據。如果我猜,我可以不看數據,你已經與數據子場像

「孩子」:「somestring」

這將解釋爲什麼您會收到類拋出異常的特定類型。

+0

我相信你是對的。正如我通過創建一個新的數據庫並重新填充新的測試數據來「證明」這一點,它一切正常。有什麼方法可以識別原始數據庫中的損壞數據嗎? – Hector

+0

不知道你會如何識別損壞的數據,但只要你通過應用程序保存和提取,你應該沒問題。 – Veeram

0

我遇到了同樣的問題。我認爲mongo不會將字符串數據類型視爲對象。如果存儲在mongo中的數據是字符串類型,而關聯的Java變量鍵入爲Object,則該變量不能被轉換,並拋出此異常。

在我的情況下,這個問題是我在Object變量置於ArrayList<String>和嗎啡其插入到蒙戈爲String(的ArrayList有一個價值似乎被解釋爲一個字符串)。原因是一個阻止加載Java對象的異常。

相關問題