MongoDB Panache возвращает void для операций записи - PullRequest
1 голос
/ 16 июня 2020

В MongoDB 'plain vanilla' методы, выполняющие операцию записи в базу данных, такие как .insertOne () или .deleteOne (), возвращают InsertOneResult или DeleteResult соответственно. Эти объекты будут возвращать логическое значение для acknowledged и id, где это применимо. Это позволяет нам гарантировать, что операция записи прошла успешно.

Однако в Panache MongoOperations.class возвращает void:

MongoOperations.class

private static void persist(MongoCollection collection, Object entity) {
    collection.insertOne(entity);
}

Тогда возникает вопрос, как мы можем получить результирующий объект InsertResult и DeleteObject?

используется зависимость pom

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-mongodb-panache</artifactId>
    <version>1.5.0.Final</version>

1 Ответ

2 голосов
/ 16 июня 2020

Это выбор дизайна.

Мы решили сделать MongoDB с Panache как можно ближе к Hibernate с Panache, чтобы persist() и delete() возвращали void.

Мы не хотели раскрывать API, связанный с MongoDB (поэтому не возвращается InsertOneResult или DeleteResult) ни то, ни другое.

Итак, ваш вопрос касается доступа к булеву acknowledged, чтобы быть уверенным, что операция подтверждена на стороне MongoDB, и id в случае, если вы создаете новые документы и позволяете MongoDB управлять идентификатором за вас. .

Вот несколько ответов:

  • id вычисляется перед вставкой в ​​базу данных, вы можете получить его из объекта после вызова операции persist(), это были бы заполнены драйвером MongoDB.
  • По умолчанию проблема записи для MongoDB - w:1, что означает, что операция будет успешной, если главный (или автономный) узел подтвердит операцию. Это означает, что по умолчанию, если вызов persist() не вызвал исключения, операция была подтверждена. Если вы не сконфигурируете MongoDB с проблемой записи w:0, как только операция persist() завершится успешно, это означает, что документ был вставлен в базу данных.
  • Для операции delete() такая же проблема записи применяются правила. Но мы не проверяли, что документ был удален (мы не проверяли значение deletedCount равным 1), возможно, это перебор, и мы могли это сделать. Если вы считаете, что мы должны это сделать, вы можете открыть проблему в репозитории Quarkus Github (это может нарушить обратную совместимость, поэтому нам нужно быть осторожными с этим).
...