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?

È stato utile?

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 {
....
}
.

è il " s " di solido ; -)

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")));
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top