java.lang.ClassCastException: org.bson.types.ObjectId не может быть приведен к com.mongodb.DBObject

Я пытаюсь использовать Morphia для проекта, но у меня возникают проблемы с сохранением сущностей. Я подумал, что что-то не так с моим определением объекта, поэтому я попробовал то, что было на их сайте, и оно выдало это исключение. Я проверил монго, и все вроде бы в порядке; коллекции создаются и появляются записи.

Я начал собирать простой тест JUnit, но дальше datastore.save(e) дело не пошло:

package com.wtf.data;

import com.google.code.morphia.Datastore;
import com.google.code.morphia.Morphia;
import com.google.code.morphia.annotations.Entity;
import com.google.code.morphia.annotations.Id;
import com.google.code.morphia.emul.org.bson.types.ObjectId;
import com.mongodb.Mongo;
import org.junit.Test;

import java.net.UnknownHostException;

public class MorphiaTest {
    @Entity
    class MyEntity {
        @Id
        ObjectId id;
        String name;
    }

    @Test
    public void save() {
        Mongo mongo = null;
        try {
            mongo = new Mongo("127.0.0.1", 27017);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        Morphia morphia = new Morphia();
        morphia.map(MyEntity.class);
        Datastore datastore = morphia.createDatastore(mongo, "MorphiaTest");
        datastore.ensureIndexes();

        MyEntity e = new MyEntity();
        datastore.save(e);
    }
}

java.lang.RuntimeException: java.lang.ClassCastException: org.bson.types.ObjectId не может быть приведен к com.mongodb.DBObject в com.google.code.morphia.mapping.EmbeddedMapper.fromDBObject(EmbeddedMapper.java:149) в com.google.code.morphia.mapping.Mapper.readMappedField(Mapper.java:433) в com.google.code.morphia.mapping.Mapper.updateKeyInfo(Mapper.java:228) в com.google.code.morphia. DatastoreImpl.postSaveOperations(DatastoreImpl.java:886) по адресу com.google.code.morphia.DatastoreImpl.postSaveGetKey(DatastoreImpl.java:683) по адресу com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:734) по адресу com .google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:802) в com.google.code.morphia.DatastoreImpl.save(DatastoreImpl.java:796) в com.wtf.data.MorphiaTest.save(MorphiaTest.java :41)

Что я делаю не так?


person doomspork    schedule 26.05.2012    source источник
comment
Это внутренний класс, он уже есть.   -  person doomspork    schedule 27.05.2012
comment
Какую версию Морфии вы используете?   -  person Mikita Belahlazau    schedule 27.05.2012


Ответы (1)


Попробуйте заменить

import com.google.code.morphia.emul.org.bson.types.ObjectId;

с

import org.bson.types.ObjectId;
person Mikita Belahlazau    schedule 26.05.2012