C'è un modo per aggiornare solo alcuni campi di un oggetto entità utilizzando il metodo save
da primavera dati JPA?JPA: aggiornare solo i campi specifici
Per esempio ho un entità JPA simili:
@Entity
public class User {
@Id
private Long id;
@NotNull
private String login;
@Id
private String name;
// getter/setter
// ...
}
L'repo CRUD:
public interface UserRepository extends CrudRepository<User, Long> { }
In Spring MVC Ho un controller che ottiene un oggetto User
per l'aggiornamento esso :
@RequestMapping(value = "/rest/user", method = RequestMethod.PUT, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ResponseEntity<?> updateUser(@RequestBody User user) {
// Assuming that user have its id and it is already stored in the database,
// and user.login is null since I don't want to change it,
// while user.name have the new value
// I would update only its name while the login value should keep the value
// in the database
userRepository.save(user);
// ...
}
Lo so che Potrei caricare l'utente usando findOne
, quindi cambiare il suo nome e aggiornarlo usando save
... Ma se ho 100 campi e voglio aggiornarne 50, potrebbe essere molto noioso cambiare ogni valore ..
C'è non c'è modo di dire qualcosa come "saltare tutti i valori nulli quando si salva l'oggetto"?
No, non c'è. L'unico modo corretto è recuperare l'oggetto, aggiornare i campi e memorizzarlo e ciò potrebbe essere dinamico. Se vuoi qualcos'altro, dovresti scrivere SQL e farlo da solo. Ma supponendo che 'User' abbia solo' null' per i campi che non si desidera salvare ciò che si potrebbe fare è il contrario, utilizzare l'utente in entrata e aggiornare i campi che non si sono modificati, quindi aggiornare quella. –
C'è un motivo per cui è meglio non saltare i valori nulli aggiornando un oggetto? – Andrea
Non esiste un modo affidabile per sapere cosa saltare, null può essere un'opzione valida per i campi, quindi cosa? Probabilmente potresti calzare qualcosa con ann 'EntityListener' o qualcosa del genere, ma ti consiglio vivamente di non farlo perché probabilmente causerà più problemi di quanti ne risolva. –