Как хранить HashMaps в mongodb с помощью morphia?

Как хранить HashMaps в mongodb с помощью morphia?

Я не уверен, что это ошибка в морфии, или я просто делаю это неправильно.

скажем, у меня есть эта модель домена

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

когда я пытаюсь сохранить это, используя класс, который расширяет репозиторий BasicDAO.save(personInstance), я получаю эту ошибку: (UsedView эквивалентен Thing в приведенном выше примере)

java.lang.IllegalArgumentException: невозможно сериализовать класс com.model.designed.UsedView в org.bson.BSONEncoder._putObjectField(BSONEncoder.java:205) в org.bson.BSONEncoder.putMap(BSONEncoder.java:245) в org. .bson.BSONEncoder._putObjectField(BSONEncoder.java:177) в org.bson.BSONEncoder.putObject(BSONEncoder.java:121) в org.bson.BSONEncoder.putObject(BSONEncoder.java:67) в com.mongodb.OutMessage. putObject(OutMessage.java:189) в com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:245) в com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:209) в com.mongodb.DBCollection.insert (DBCollection.java:66) в com.mongodb.DBCollection.save(DBCollection.java:622) в com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:731) в com.google.code.morphia. DatastoreImpl.save(DatastoreImpl.java:793) в com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:787) в com.google.code.morphia.dao.BasicDAO.save(BasicDAO.ja ва:109)...

Тогда, если я изменил:

"private HashMap<String, Thing> things"

to

"private HashMap<String, String> things"

он нормально сохраняет.

Какие-нибудь мысли?

очень признателен!


person Khon Lieu    schedule 17.11.2011    source источник


Ответы (2)


Отображается ли Thing как сущность Morphia? Если нет, морфия не будет знать, как сохранить его в монго.

person lucas    schedule 21.11.2011
comment
хм, нет, это не так. обычно, если я определяю в классе Thing вещь; он сохраняется правильно. Я попробую ваше предложение сегодня и посмотрю, что произойдет. - person Khon Lieu; 23.11.2011
comment
так что у меня наконец-то появилось время попробовать то, что вы предложили, но без костей. Спасибо хоть - person Khon Lieu; 02.12.2011

старый вопрос, который я понимаю, но я наткнулся на это: (непроверенный)

«... Это может содержать любые базовые типы, поддерживаемые драйвером MongoDB, включая списки и карты, но не сложные объекты, если вы не зарегистрировали преобразователи в Morphia (например, morphia.getMapper().getConverters().addConverter(new MyCustomTypeConverter())».

От: http://www.carfey.com/blog/using-mongodb-with-morphia/

Как говорится: не проверено.

чт.

person Geert-Jan    schedule 07.12.2011
comment
интересно, скоро попробую. Я немного загружен работой прямо сейчас. я скоро отчитаюсь. Благодарность! - person Khon Lieu; 09.12.2011