#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:
Я предполагаю, что вы либо снова меняете значение (после печати журналов другим методом), либо запускаете это как часть транзакции, которая где-то по пути завершается сбоем и, следовательно, не фиксируется.