Bene, la domanda dice praticamente tutto. Usando JPARepository come posso aggiornare un'entità?
JPARepository ha solo un metodo di salvataggio , che non mi dice se è effettivamente creato o aggiornato. Ad esempio, inserisco un semplice oggetto per l'utente del database, che ha tre campi: 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;
}
}
Quindi chiamo semplicemente save()
, che a questo punto è in realtà un inserimento nel database:
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);
Fin qui tutto bene. Ora voglio aggiornare questo utente, diciamo cambiare la sua età. A tale scopo, potrei usare una query, QueryDSL o NamedQuery, qualunque cosa. Ma, considerando che voglio solo usare spring-data-jpa e JPARepository, come posso dirlo che invece di un inserto voglio fare un aggiornamento?
In particolare, come faccio a dire a spring-data-jpa che gli utenti con lo stesso nome utente e nome sono in realtà EQUAL e che l'entità esistente dovrebbe essere aggiornata? Sostituire uguali non ha risolto questo problema.