Mój kontrolerJak zaktualizować tylko atrybuty, które zostały zmienione - Spring MVC
@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
public String updateUserById(@PathVariable("id") Long id, Model model) {
User user = userRepository.findOne(id);
model.addAttribute(user);
return "admin/editUser";
}
@RequestMapping(value = "/user/{id}", method = RequestMethod.POST)
@ResponseBody
public String updateUserById(@PathVariable("id") Long id, @ModelAttribute User user) {
userRepository.updateUser(id, user); // with a try catch
}
DAO
@Override
public void updateUser(Long id, User user) {
User userDB = userRepository.findOne(id);
userDB.setFirstName(user.getFirstName());
userDB.setLastName(user.getLastName());
userDB.setEmail(user.getEmail());
userDB.setUsername(user.getUsername());
userRepository.save(userDB);
}
Ta metoda działa, ale jest to dość brzydki dla mnie. Powiedzmy, że użytkownik właśnie zmienił pole pierwszego imienia w widoku, w jaki sposób mogę zaadaptować mój kod, aby wywoływał tylko funkcję ustawiania imienia?
Coś jak wzorzec Obserwatora do pola powiadomień, które uległy zmianie?
Użycie hibernacji? – Musaddique
Tak, używam hibernacji, spring-boot-starter-data-jpa, aby być bardziej precyzyjnym – melkir
zobacz moją odpowiedź poniżej użyj dynamicUpdate = true. zaktualizuje tylko zmienione wartości. – Musaddique