Spring Data JPA: Como atualizar um modelo com elegância?
Meu modelo é assim:
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name="email")
private String email;
@Column(name = "weblink")
private String webLink;
//getter & setter
}
coletamos dados de formulário ou móveis por solicitação http, e o springmvc fará esses dados para um usuário semelhante ao modelo.
por exemplo, eu tenho uma solicitação como esta:
http://localhost:8080/update?id=1919&[email protected]
No contoller, o URL da solicitação e seus parâmetros serão automaticamente transferidos para umUser
objeto.
@RequestMapping(method = RequestMethod.GET, value = "/update0")
public User update(@ModelAttribute("User") User user){
System.out.println(user.getId());
System.out.println(user.getEmail());
System.out.println(user.getWebLink());
return userRepository.save(test);
}
se eu tiver um registro no mysql cujo id seja 1919, e as colunas (id, email, weblik) tiverem todos valores.
como você vê, o objeto de usuário que passou pela web ou celular tem duas propriedades
http://localhost:8080/update?id=1919&[email protected]
id e email têm valores e o link da web não.
Então, se eu executarsave
método, o email das colunas será atualizado para[email protected]
, e o campo weblik também será atualizado paraNULL
, mas não quero atualizar este campo, só quero atualizar o campo de email.
Eu tenho duas maneiras de resolver o problema, mas nem todas são elegantes.
5.1 carregar primeiro o objeto do usuário e atualizar
User userExist = userRepository.findOne(user.getId());
userExist.setEmail(user.getEmail());
//or using
//BeanUtil.copyProprty(formDto,modle)
userRepository.save();
5.2 usando@DynamicUpdate
, mas não está funcionando.
Existe outra maneira de atualizar o modelo do usuário e não fazer algum trabalho extra.
Desde já, obrigado.