Поведение при сохранении Spring Simple Mongo Repository

Рассмотрим следующий класс Java.

class Transaction {
@Id
public String id;
public String firstProperty;
public String secondProperty;
} 

class TransactionRepository extends MongoRepository<TransactionInfo , String> {
...
}

В Java выполняется следующий код:

Transaction transaction = new Transaction("T1");
transaction.setFirstProperty("first");
transactionRepository.save(transaction);

Следующий документ создан.

{
_id:123,
firstProperty: "first"
}

Если этот фрагмент кода будет выполнен позже:

Transaction transaction = new Transaction("T1");
transaction.setSecondProperty("second");
transactionRepository.save(transaction);

Ожидаемый документ:

{
_id:123,
firstProperty: "first",
secondProperty: "second"
}

Фактический документ:

{
_id:123,
secondProperty: "second"
}

Из того, что я прочитал в документации MongoDB, я ожидаю, что документ будет обновлен с помощью «secondProperty», но это приведет к удалению «firstProperty». Я думаю, что документ создается снова, а не обновляется. Пожалуйста, дайте мне знать, если я что-то упускаю.

Ваш код не компилируется, конструктор Transaction отсутствует. Какова цель аргумента конструктора? Откуда взялось странное значение id? TransactionInfo должен быть Transaction? Почему вы ожидаете, что второй Transaction каким-то образом будет объединен с существующим состоянием в базе данных? На какую часть документации вы имеете в виду?

Jens Schauder 09.04.2021 11:22
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
17
0

Другие вопросы по теме