Простая вставка объекта с использованием 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. Это сработало для меня.