Bueno, la pregunta lo dice todo. Usando JPARepository, ¿cómo actualizo una entidad?
JPARepository solo tiene un método de guardar , que no me dice si es crear o actualizar en realidad. Por ejemplo, insertar un simple objeto al usuario de base de datos, que tiene tres campos: firstname
, lastname
y 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;
}
}
Luego simplemente llamo save()
, que en este punto es en realidad una inserción en la base de datos:
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);
Hasta aquí todo bien. Ahora quiero actualizar a este usuario, por ejemplo, cambiar su edad. Para este propósito, podría usar una consulta, QueryDSL o NamedQuery, lo que sea. Pero, considerando que solo quiero usar spring-data-jpa y el JPARepository, ¿cómo le digo que en lugar de una inserción quiero hacer una actualización?
Específicamente, ¿cómo le digo a spring-data-jpa que los usuarios con el mismo nombre de usuario y nombre son realmente IGUALES y que se supone que la entidad existente debe actualizarse? Anular iguales no resolvió este problema.