Bem, a pergunta praticamente diz tudo. Usando o JPARepository, como atualizo uma entidade?
O JPARepository possui apenas um método de salvamento , que não informa se é realmente criado ou atualizado. Por exemplo, eu inserir um simples objeto para o usuário do banco de dados, que tem três campos: firstname
, lastname
e age
:
@Entity
public class User {
private String firstname;
private String lastname;
//Setters and getters for age omitted, but they are the same as with firstname and lastname.
private int age;
@Column
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
@Column
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
private long userId;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public long getUserId(){
return this.userId;
}
public void setUserId(long userId){
this.userId = userId;
}
}
Então eu simplesmente chamo save()
, que neste momento é realmente uma inserção no banco de dados:
User user1 = new User();
user1.setFirstname("john"); user1.setLastname("dew");
user1.setAge(16);
userService.saveUser(user1);// This call is actually using the JPARepository: userRepository.save(user);
Por enquanto, tudo bem. Agora eu quero atualizar este usuário, digamos, mudar sua idade. Para esse propósito, eu poderia usar uma consulta, QueryDSL ou NamedQuery, qualquer que seja. Mas, considerando que eu só quero usar o spring-data-jpa e o JPARepository, como posso dizer que, em vez de uma inserção, quero fazer uma atualização?
Especificamente, como digo ao spring-data-jpa que os usuários com o mesmo nome de usuário e nome são realmente iguais e que a entidade existente deveria ser atualizada? Substituir iguais não resolveu esse problema.