Spring save() вставка вместо слияния ⇐ JAVA
-
Гость
Spring save() вставка вместо слияния
Я искал похожие темы и, к сожалению, не помог.
Я начинаю с кнопки для редактирования произвольного задания
Изменить Контроллер обрабатывает это следующим образом:
// показываем форму обновления @RequestMapping(value = "/updateprep/{id}", метод = RequestMethod.GET) public String showUpdateUserForm(@PathVariable("id") Длинный идентификатор, модель модели) { Задание jobToUpdate = репозиторий.findById(id).orElseThrow(); model.addAttribute("updateJob", jobToUpdate); если (log.isDebugEnabled()) { log.debug("/updateprep: будет редактировать задание с идентификатором {}", id); log.debug("/updateprep: Задание — {}", jobToUpdate); } вернуть «обновить задание»; } Это предоставляет форму для обновления Задания, которое должно иметь правильный Задание, найденное по его идентификатору. Проверка моего журнала отладки в контроллере выше показывает, что был найден правильный.
Обновить задание Дата Время Место Сумма Оплачивается Платно Заметки Сохранить Это несложная процедура сохранения, но именно в этот момент идентификатор становится нулевым, и в результате правильное Задание не обновляется, а полностью в таблицу базы данных вставляется новая строка:
@RequestMapping(value = "/savejob", метод = RequestMethod.POST) // публичная строка saveJob(@RequestParam Job updateJob) { public String saveJob(@ModelAttribute("updateJob") Job updateJob) { если (log.isDebugEnabled()) { log.debug("/savejob: сохранение задания с идентификатором {} и датой {}", updateJob.getId(), updateJob.getDate()); } репозиторий.save(updateJob); вернуть «панель управления»; } Определение Job включает в себя:
@Entity общественный класс Job { @Идентификатор // @GeneratedValue(strategy=GenerationType.SEQUENCE) @GeneratedValue(стратегия = GenerationType.IDENTITY) // @GeneratedValue(strategy=GenerationType.AUTO) частный длинный идентификатор; @Column(name = «Дата», nullable = false, columnsDefinition = «ДАТА») частная дата LocalDate; личное струнное место; частная двойная сумма; @Column(name = "Выставлен счет", nullable = false, columnsDefinition = "TINYINT(1)") частный логический счет; @Column(name = «Оплачено», nullable = false, columnsDefinition = «TINYINT(1)») платное частное логическое значение; частные строковые заметки; Что происходит не так?
Я искал похожие темы и, к сожалению, не помог.
Я начинаю с кнопки для редактирования произвольного задания
Изменить Контроллер обрабатывает это следующим образом:
// показываем форму обновления @RequestMapping(value = "/updateprep/{id}", метод = RequestMethod.GET) public String showUpdateUserForm(@PathVariable("id") Длинный идентификатор, модель модели) { Задание jobToUpdate = репозиторий.findById(id).orElseThrow(); model.addAttribute("updateJob", jobToUpdate); если (log.isDebugEnabled()) { log.debug("/updateprep: будет редактировать задание с идентификатором {}", id); log.debug("/updateprep: Задание — {}", jobToUpdate); } вернуть «обновить задание»; } Это предоставляет форму для обновления Задания, которое должно иметь правильный Задание, найденное по его идентификатору. Проверка моего журнала отладки в контроллере выше показывает, что был найден правильный.
Обновить задание Дата Время Место Сумма Оплачивается Платно Заметки Сохранить Это несложная процедура сохранения, но именно в этот момент идентификатор становится нулевым, и в результате правильное Задание не обновляется, а полностью в таблицу базы данных вставляется новая строка:
@RequestMapping(value = "/savejob", метод = RequestMethod.POST) // публичная строка saveJob(@RequestParam Job updateJob) { public String saveJob(@ModelAttribute("updateJob") Job updateJob) { если (log.isDebugEnabled()) { log.debug("/savejob: сохранение задания с идентификатором {} и датой {}", updateJob.getId(), updateJob.getDate()); } репозиторий.save(updateJob); вернуть «панель управления»; } Определение Job включает в себя:
@Entity общественный класс Job { @Идентификатор // @GeneratedValue(strategy=GenerationType.SEQUENCE) @GeneratedValue(стратегия = GenerationType.IDENTITY) // @GeneratedValue(strategy=GenerationType.AUTO) частный длинный идентификатор; @Column(name = «Дата», nullable = false, columnsDefinition = «ДАТА») частная дата LocalDate; личное струнное место; частная двойная сумма; @Column(name = "Выставлен счет", nullable = false, columnsDefinition = "TINYINT(1)") частный логический счет; @Column(name = «Оплачено», nullable = false, columnsDefinition = «TINYINT(1)») платное частное логическое значение; частные строковые заметки; Что происходит не так?
Мобильная версия