Come aggiornare / salvare solo i campi modificati
-
12-12-2019 - |
Domanda
Come posso aggiornare solo un particolare set di campi nel database con PLAY?Attualmente ho un modello User
che contiene un campo specifico, consentono di chiamarlo: isAdministrator
:
private boolean isAdministrator;
.
E ho i metodi di accesso:
/**
* @return the isAdministrator
*/
public boolean isAdministrator() {
return isAdministrator;
}
/**
* @param isAdministrator
* the isAdministrator to set
*/
public void setAdministrator(boolean isAdministrator) {
this.isAdministrator = isAdministrator;
}
.
Ma quando modifico il nome utente, tramite un modulo in cui isAdministrator
non è incluso, riproduce i miei oggetti utente e imposta il valore 0
per questo utente?
Quindi, come posso aggiornare solo i campi cambiati?
Soluzione
Non rispondo direttamente alla tua domanda, ma invece di avere un booleano che indica che il tuo utente è un amministratore o no, creerei una classe Admin
che eredita dall'utente.
public class Admin extends User {
....
}
.
Modifica:
Nel controller, è possibile caricare il vecchio valore dal database prima di aggiornare con i valori del modulo:
...
User userFromDB = User.findById(anId);
User userFromForm = userForm.get();
// set previous value
userFromForm.setArchived(userFromDB.getArchived());
User.update(userFromForm);
...
. Altri suggerimenti
Oltre a Nico , posso aggiungere solo che non è necessario utilizzare la classe Form
in ogni caso.A volte è sufficiente ottenere solo i dati dalla richiesta e aggiornare manualmente il tuo oggetto che utile, specialmente con le chiamate Ajax quando hai il livello dettagliato di risparmio intermedio (vedere esempio di utilizzo di Dynamicform può essere anche più breve e anche puoi convalidare te stesso :
È possibile specificare i campi che si desidera aggiornare.Dì che vuoi aggiornare il nome allora ti farai così:
Ebean.update(user, new HashSet<String>(Arrays.asList("name")));
.