我是MongoDB和Mongojack的新手,我正在尝试更新文档,如果它已经退出或者插入新文档。出于测试目的,我使用下面的代码,即按钮点击事件。我的问题是,当我第一次单击该按钮时,它会添加一个带有生成的对象ID的文档,但是当我再次单击时,它会添加另一个具有相同对象ID的文档。我期望每次只更新一个文档。
在Google上搜索后,我在@objectId
字段中添加了_id
注释,但在下面的根目录中给出了一个错误;
任何帮助..
模型类
public class Transport implements StockLoadable {
// @ObjectId
private String _id;
private String info;
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public String get_id() {
return _id;
}
public void set_id(String _id) {
this._id = _id;
}
@Override
public String toString() {
return "Vehicle";
}
@Override
public void setStock(Stock stock) {
// TODO Auto-generated method stub
}
@Override
public Stock getStock() {
// TODO Auto-generated method stub
return null;
}
}
按钮点击事件
Transport transport;
btn.addClickListener(o->{
if(transport==null){
transport= new Transport();
transport.setInfo("Info");
}
try (MongoClient mongoClient = new MongoClient("localhost",27017)) {
DB db = mongoClient.getDB("transport");
DBCollection table = db.getCollection("test");
JacksonDBCollection<Transport, String> collection = JacksonDBCollection.wrap(table, Transport.class, String.class);
WriteResult<Transport, String> result = collection.save(transport);
System.out.println(result.getSavedId());
transport= collection.findOne(DBQuery.is("_id",result.getSavedId()));
} catch (Exception e) {
e.printStackTrace();
}
});
添加注释后我遇到的根例外
Caused by: java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.introspect.Annotated.getType()Lcom/fasterxml/jackson/databind/JavaType;
at org.mongojack.internal.MongoAnnotationIntrospector.findDeserializer(MongoAnnotationIntrospector.java:86)
at com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair.findDeserializer(AnnotationIntrospectorPair.java:515)
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.findDeserializerFromAnnotation(BasicDeserializerFactory.java:1648)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.constructSettableProperty(BeanDeserializerFactory.java:721)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.addBeanProps(BeanDeserializerFactory.java:498)
答案 0 :(得分:0)
我正在回答我自己的问题,这可能对其他人有用。 复制文档的原因是我对mongodb自动id过程的误解。
如果您需要让db为您的文档发出ID,那么您必须使用名称为org.bson.types.ObjectId
的{{1}}字段类型并将其留空。
如果要添加ID作为选择,请使用名称_id
定义具有所需类型的字段,并为其指定适当的值。如果你把它留空,mongo会添加一个_id
类型的id,这将导致我的问题。
将问题解决后的ObjectId
字段类型从_id
更改为String
。但我无法找到异常的原因。刚刚删除了注释。