JpaRepository save() не обновляет все значения в DB. Но выдает результат

#java #hibernate #spring-boot #spring-data-jpa

#java #переход в спящий режим #весенняя загрузка #spring-data-jpa

Вопрос:

Я пытаюсь обновить поля таблицы MySQL с помощью JpaRepository save(). Но save() обновляет поле, которое равно null, но не обновляет поля, которые уже имеют некоторые значения.

значения, находящиеся в настоящее время в DB: place : null количество элементов : 2

Новые значения передаются во временном режиме для обновления place : Noplace itemcount : 1

Я пробовал с помощью 1. save(), 2. saveAndFlush с помощью @Transaction 3. Объект снова извлекается перед его обновлением.

 public Cons updateCons(Cons temp, Cons con) {

Cons tempCons = consRepository.findOneByIdAndConstId(cons.getId(),cons.getConsId());
   // tempCons.setId(cons.getId());

    log.info("before saving cons :{}, count={}",consignment.getConsId(),temp.getItemCount());
    tempCons.setItemCount(temp.getItemCount());
    tempCons.setplaceStatus("Noplace"); // this filed is currently null


    Cons result = consRepository.saveAndFlush(tempCons);
    log.info("after saving cons :{}, count={}",cons.getConsId(),result.getItemCount()); // logs the updated value on itemCount.
  

}

Ожидаемый результат: itemcount должно быть обновлено новым значением place должно быть обновлено жестко заданным значением «Noplace»

Фактический результат: itemcount не обновляется в db новым значением. но место обновляется на «Noplace», но журналы печатают новое значение в качестве count.

Комментарии:

1. Вы изменили значение статуса после вашего метода saveAndFlush? Кроме того, лучше опубликовать весь ваш класс с информацией о том, как работать с транзакцией

Ответ №1:

Я предполагаю, что вы либо снова меняете значение (после печати журналов другим методом), либо запускаете это как часть транзакции, которая где-то по пути завершается сбоем и, следовательно, не фиксируется.