I would like to provide an ObjectId myself when inserting documents
into mongodb.
I think I basically copied part of the code from the tutorial:
http://vznet.github.com/mongo-jackson-mapper/object-ids.html
I'm actually not a 100% sure about the usage difference of @ObjectId
and @Id/@JsonProperty("_id"), but i played with several variations and
they all turn out the same..
This is basically my setup:
public class MyClass {
private String someId;
@ObjectId @Id
public String getSomeId() {
return someId;
}
@ObjectId @Id
public void setSomeId(String someId) {
this.someId = someId;
}
}
public class MongoTest {
public static void main(String[] args) throws UnknownHostException,
MongoException {
Mongo mongo = new Mongo("localhost", 27017);
DB db = mongo.getDB("myDB");
JacksonDBCollection<MyClass, String> myClassCollection =
JacksonDBCollection.wrap(db.getCollection("myclass"),
MyClass.class, String.class);
MyClass myClass = new MyClass();
myClass.setSomeId("myId");
myClassCollection.insert(myClass);
}
}
Exception in thread "main"
net.vz.mongodb.jackson.MongoJsonMappingException: Error mapping BSON
to POJOs
at
net.vz.mongodb.jackson.JacksonDBCollection.convertToDbObject(JacksonDBCollection.java:
1545)
at
net.vz.mongodb.jackson.JacksonDBCollection.insert(JacksonDBCollection.java:
236)
at com.example.MongoTest.main(MongoTest.java:27)
Caused by: org.codehaus.jackson.map.JsonMappingException: invalid
ObjectId [myId] (through reference chain: com.example.MyClass["_id"])
at
org.codehaus.jackson.map.JsonMappingException.wrapWithPath(JsonMappingException.java:
218)
at
org.codehaus.jackson.map.JsonMappingException.wrapWithPath(JsonMappingException.java:
183)
at
org.codehaus.jackson.map.ser.std.SerializerBase.wrapAndThrow(SerializerBase.java:
140)
at
org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:
158)
at
org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:
112)
at
org.codehaus.jackson.map.ser.StdSerializerProvider._serializeValue(StdSerializerProvider.java:
610)
at
org.codehaus.jackson.map.ser.StdSerializerProvider.serializeValue(StdSerializerProvider.java:
256)
at org.codehaus.jackson.map.ObjectMapper.writeValue(ObjectMapper.java:
1613)
at
net.vz.mongodb.jackson.JacksonDBCollection.convertToDbObject(JacksonDBCollection.java:
1543)
... 2 more
Caused by: java.lang.IllegalArgumentException: invalid ObjectId [myId]
at org.bson.types.ObjectId.<init>(ObjectId.java:128)
at org.bson.types.ObjectId.<init>(ObjectId.java:122)
at
net.vz.mongodb.jackson.internal.ObjectIdSerializer.serialiseObject(ObjectIdSerializer.java:
52)
at
net.vz.mongodb.jackson.internal.ObjectIdSerializer.serialize(ObjectIdSerializer.java:
44)
at
org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:
446)
at
org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:
150)
... 7 more
Any help is greatly appreciated!