Простая вставка объекта с использованием MongoDB и MongoJack

Я пытаюсь следовать учебнику по MongoJack, но у меня не получается выполнить первую задачу: вставить объект в базу данных.

Вот что у меня есть:

DB db = new MongoClient().getDB("mydb");

JacksonDBCollection<MyDomainObject, String> coll =
    JacksonDBCollection.wrap(db.getCollection("coll"),
                             MyDomainObject.class,
                             String.class);

MyDomainObject obj = new MyDomainObject(ObjectId.get().toString(), 123456789L);

WriteResult<MyDomainObject, String> result = coll.insert(obj);

System.out.println(result.getSavedId());

куда MyDomainObject Класс выглядит следующим образом:

class MyDomainObject {

    // @org.mongojack.ObjectId  doesn't work
    public String id;
    public long someValue;

    public MyDomainObject(String id, long someValue) {
        this.id = id;
        this.someValue = someValue;
    }

}

С приведенным выше кодом я получаю следующее исключение:

Exception in thread "main" java.lang.ClassCastException: org.bson.types.ObjectId cannot be cast to java.lang.String
    at Test.main(Test.java:26)

И я не могу за свою жизнь понять, почему. Любая помощь приветствуется.

2 ответа

Решение

Видимо, все, что мне нужно было сделать, это переименовать

public String id;

в

public String _id;

(Аннотируя поле с @JsonProperty("_id") также, кажется, делает трюк. AFAICT нет никакого способа сказать, что public String id следует заменить _id поле. Если кто-то знает, как это сделать, мне интересно, как это сделать.

Вы также можете аннотировать любое поле String с помощью @org.mongojack.Id. Это сработало для меня.

Другие вопросы по тегам