web-dev-qa-db-ja.com

Spring mongodbは、保存後に挿入されたアイテムのIDを取得します

私はSpringMongoDbを使用しています。

insertメソッドを使用してさまざまなエンティティを作成します: http://docs.spring.io/spring-data/mongodb/docs/current/api/org/springframework/data/mongodb/core/MongoOperations .html#insert-Java.lang.Object-

ただし、すべてのメソッドはvoidを返します。挿入されたドキュメントのObjectIdを返す必要があります。

それを取得するための最良の方法は何ですか?

11
Madhur Ahuja

これはかなり興味深く、私が共有したいと思いました。上記のBatScreamコメントの助けを借りて、これに対する解決策を見つけました:

オブジェクトを作成してMongoDBに挿入します。

_    Animal animal = new Animal();
    animal.setName(name);
    animal.setCat(cat);

    mongoTemplate.insert(animal);
_

動物クラスは、すべてのフィールドのゲッターと設定で次のようになります。

_public class Animal {

    @Id
    @JsonProperty
    private String id;
    @JsonProperty
    private String name;
    @JsonProperty
    private String cat;

    public String getId() {
        return id;
    }
}
_

mongoTemplate.insert(animal);の下に挿入を行った後、実際にメソッドanimal.getId()を呼び出すと、作成されたObjectIdが返されます。

27
Simon

@AlanHでも、animal.getId()nullであるという同じ問題が発生しました。そして、idフィールドがwitherメソッドで最終フィールドとして設定されていることに気づきました。したがって、もちろんgetId()はnullです。これは、idフィールドが不変であり、witherメソッドがidを持つ新しいオブジェクトを返すためです。

この場合:animal = template.insert(animal)を使用します。

0
Philip