Frage

Wie kann ich mit Play nur einen bestimmten Satz von Feldern in der Datenbank aktualisieren?Derzeit habe ich eine User Modell, das ein bestimmtes Feld enthält, nennen wir es: isAdministrator:

private boolean isAdministrator;

Und ich habe die Zugriffsmethoden:

/**
 * @return the isAdministrator
 */
public boolean isAdministrator() {
    return isAdministrator;
}

/**
 * @param isAdministrator
 *            the isAdministrator to set
 */
public void setAdministrator(boolean isAdministrator) {
    this.isAdministrator = isAdministrator;
}

Aber wenn ich den Benutzernamen ändere, über ein Formular wo isAdministrator NICHT enthalten ist, setzt Play meine Benutzerobjekte zurück und legt den Wert fest 0 für diesen Benutzer?

Wie kann ich also nur die geänderten Felder aktualisieren?

War es hilfreich?

Lösung

Ich beantworte Ihre Frage nicht direkt, aber anstatt einen booleschen Wert zu haben, der angibt, ob Ihr Benutzer ein Administrator ist oder nicht, würde ich einen erstellen Admin Klasse, die vom Benutzer erbt.

public class Admin extends User {
....
}

Es ist das "S" von SOLIDE ;-)

BEARBEITEN:

Im Controller können Sie den alten Wert aus der Datenbank laden, bevor Sie mit den Formularwerten aktualisieren:

...
User userFromDB = User.findById(anId);
User userFromForm = userForm.get();

// set previous value
userFromForm.setArchived(userFromDB.getArchived());

User.update(userFromForm);
...

Andere Tipps

Zusätzlich zu Nicos Als Antwort kann ich nur hinzufügen, dass Sie es nicht verwenden müssen Form Klasse auf jeden Fall.Manchmal reicht es aus, nur Daten aus der Anfrage abzurufen und Ihr Objekt manuell zu aktualisieren, was insbesondere bei Ajax-Aufrufen nützlich ist, wenn Sie über eine detaillierte Ebene der Zwischenspeicherung verfügen (siehe Beispiel für die Verwendung von). DynamicForm es kann auch noch kürzer sein Sie können es selbst validieren:

public static Result updateName(Integer id){
    User user = User.find.byId(id);
    user.name = form().bindFromRequest().get("name");
    user.update(id);
    return ok();
}

Sie können die Felder angeben, die Sie aktualisieren möchten.Angenommen, Sie möchten die aktualisieren Name dann wirst du so vorgehen:

Ebean.update(user, new HashSet<String>(Arrays.asList("name")));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top