Как создать неизменяемый Java объект из источника данных Mon go - PullRequest
0 голосов
/ 06 августа 2020

Я хочу создать неизменяемые объекты Java непосредственно из коллекции Mon go, например:

public final class Sample {

    private final String description;
    private final Integer min;
    private final Integer max;

    public Sample(String description, Integer min, Integer max) {
        this.description = description;
        this.min = min;
        this.max = max;
    }

    public String getDescription() {
        return description;
    }

    public Integer getMin() {
        return min;
    }

    public Integer getMax() {
        return max;
    }
}

Я использовал PojoCodecProvider для сохранения объектов, которые работает хорошо. Однако я, очевидно, не могу использовать это для загрузки объекта обратно, поскольку нет конструктора без аргументов:

//Doesn't work
MongoCollection<Sample> samples = db.getCollection("samples", Sample.class);

Есть ли способ сделать это без извлечения всех атрибутов из Document и сам вызываю конструктор? Таких типов объектов будет много, а некоторые будут довольно большими, если есть удобный способ сделать это, это будет большим подспорьем!

Большое спасибо.

1 Ответ

1 голос
/ 11 августа 2020

Вы можете добавить аннотации BSON к своему классу, как указано в документации mongoDB:

https://mongodb.github.io/mongo-java-driver/3.5/bson/pojos/#supporting -pojos-without-no-args-constructors

@BsonDiscriminator
public final class Sample {

    private final String description;
    private final Integer min;
    private final Integer max;

    @BsonCreator
    public Sample(@BsonProperty("description") String description, @BsonProperty("min") Integer min, @BsonProperty("max") Integer max) {
        this.description = description;
        this.min = min;
        this.max = max;
    }

    public String getDescription() {
        return description;
    }

    public Integer getMin() {
        return min;
    }

    public Integer getMax() {
        return max;
    }
}
...