2016-09-27 11 views
0

MongoDBとMongojackを初めて使用しています。既に終了しているドキュメントを更新しようとしています。テスト目的のために、私はボタンのクリックイベントである以下のコードを使用します。私の問題は、生成されたオブジェクトIDを持つドキュメントを初めて追加するときにボタンをクリックしたときですが、もう一度クリックすると、同じオブジェクトIDを持つ別のドキュメントが追加されます。私は毎回更新することで、このコレクションに1つのドキュメントだけを残すことを期待しています。Mongodbをmongojakで更新または挿入する - Java

私は@objectIdアノテーションを_idフィールドに追加しましたが、以下のルートカースにエラーが表示されます。私がいる

任意の助け..

Modelクラス

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

'jackson-databind' jarのバージョンは何ですか? – sidgate

+0

実際に私は依存関係http://mongojack.org/installation.htmlを追加しました。 – user2486322

答えて

0

を追加した後、私はよ答える私自身の質問を誤解しているので、他の人には役に立ちそうです。 文書を複製する理由は、mongodb自動IDプロセスの誤解です。

文書にIDを発行させる必要がある場合は、org.bson.types.ObjectIdタイプのフィールドに_idのフィールドを使用し、それを空のままにする必要があります。 idを任意の値として追加する場合は、名前が_idのタイプのフィールドを定義し、適切な値を割り当てます。あなたがそれを空のままにしておくと、mongoはタイプObjectIdのIDを追加します。このIDは結果として私が持っていたような問題を引き起こします。

のフィールドをStringからObjectIdに変更して問題を解決してください。しかし、私は例外の理由を見つけることができませんでした。注釈も削除しました。

関連する問題