Eh bien, la question dit à peu près tout. Utilisation de JPARepository, comment mettre à jour une entité?
JPARepository n'a qu'une méthode de sauvegarde , qui ne me dit pas s'il est réellement créé ou mis à jour. Par exemple, insérer un objet simple à la base de données utilisateur, qui a trois champs: firstname
, lastname
et 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;
}
}
Ensuite save()
, j'appelle simplement , qui à ce stade est en fait une insertion dans la base de données:
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);
Jusqu'ici tout va bien. Maintenant, je veux mettre à jour cet utilisateur, disons changer son âge. Pour cela, je pourrais utiliser une requête, QueryDSL ou NamedQuery, peu importe. Mais, étant donné que je veux juste utiliser spring-data-jpa et le référentiel JPAR, comment puis-je lui dire qu'au lieu d'un insert, je veux faire une mise à jour?
Plus précisément, comment puis-je dire à spring-data-jpa que les utilisateurs avec le même nom d'utilisateur et le même prénom sont en fait EQUAL et que l'entité existante est censée être mise à jour? Le remplacement des égaux n'a pas résolu ce problème.