2011-11-17 153 views
0

我如何使用morphia在mongodb中存儲HashMaps?如何使用嗎啡在mongodb中存儲HashMaps?

我不確定這是morphia中的錯誤,還是我只是做錯了。

說我有這樣的域模型

@Entity("person") 
public class Person { 
    private String property1; 
    private String property2; 
    private HashMap<String, Thing> things; 
} 

當我試圖挽救這個使用擴展BasicDAO repo.save類(personInstance)我得到這個錯誤:(UsedView是事情的例子相當於上文)

java.lang.IllegalArgumentException異常:在org.bson.BSONEncoder._putObjectField(BSONEncoder.java:205) 不能序列類com.model.designed.UsedView 在org.bson.BSONEncoder.putMap( BSONEncoder.java:245) at org.bson.BSONEncoder._putObjectField(BSONEnco der.java:177) at org.bson.BSONEncoder.putObject(BSONEncoder.java:121) at org.bson.BSONEncoder.putObject(BSONEncoder.java:67) at com.mongodb.OutMessage.putObject(OutMessage。 java:189) at com.mongodb.DBApiLayer $ MyCollection.insert(DBApiLayer.java:245) at com.mongodb.DBApiLayer $ MyCollection.insert(DBApiLayer.java:209) at com.mongodb.DBCollection.insert( DBCollection.java:66) at com.mongodb.DBCollection.save(DBCollection.java:622) at com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:731) at com.google.code。 morphia.DatastoreImpl.save(DatastoreImpl.java:793) at com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:787) 在com.google.code.morphia.dao.BasicDAO.save(BasicDAO.java:109)...

然後,如果我改變:

"private HashMap<String, Thing> things" 

"private HashMap<String, String> things" 

節省很好。

有什麼想法?

非常感謝!

回答

0

Thing映射爲Morphia實體嗎?否則,morphia不會知道如何將它保存到mongo中。

+0

humm,不,它不是。通常如果我在課堂上定義事物;它會持續正確。今天我會試一試你的建議,看看會發生什麼。 – Khon

+0

所以我終於有時間嘗試你的建議,但沒有骰子。雖然 – Khon

0

老問題,我知道,但我碰到這個傳來:(未經測試)

」 ......這可能包含由MongoDB的驅動器,包括列表和地圖支持的任何基本類型,但沒有複雜的對象,除非您已註冊轉換器與嗎啡(例如morphia.getMapper().getConverters().addConverter(new MyCustomTypeConverter())

來自: http://www.carfey.com/blog/using-mongodb-with-morphia/

作爲表示:未測試

HTH

01。
+0

有趣,我會盡快給你一個嘗試。我現在有點忙於工作。我會很快回報。謝謝! – Khon