Question

Comment puis-je mettre à jour uniquement un ensemble de champs de la base de données avec le Jeu?Actuellement, j'ai un User modèle qui contient un domaine spécifique, de laisser l'appeler: isAdministrator:

private boolean isAdministrator;

Et j'ai l'accesseur méthodes:

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

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

Mais quand je change le nom d'utilisateur, via un formulaire où isAdministrator n'est PAS inclus, Jouer réinitialise mes objets Utilisateur et définit la valeur 0 pour cet utilisateur?

Alors, comment puis-je mettre à jour uniquement les champs modifiés?

Était-ce utile?

La solution

Je n'ai pas directement la réponse à votre question, mais au lieu d'avoir une valeur booléenne indiquant que votre Utilisateur est un administrateur ou pas, je voudrais créer un Admin classe qui hérite de l'Utilisateur.

public class Admin extends User {
....
}

C'est le "S"de SOLIDE ;-)

EDIT:

Dans le contrôleur, vous pouvez charger l'ancienne valeur de la base de données avant de mettre à jour avec les valeurs d'un formulaire:

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

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

User.update(userFromForm);
...

Autres conseils

En plus nico réponse je ne peux ajouter, que vous n'avez pas besoin d'utiliser Form dans tous les cas.Parfois il suffit simplement de récupérer les données de la demande et mise à jour de votre objet manuellement qui utile, en particulier avec des appels ajax quand vous avez le niveau de détail de l'intermédiaire de l'épargne (voir l'exemple de l'utilisation de la DynamicForm il peut être encore plus court et aussi vous pouvez vérifier vous-même:

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

Vous pouvez spécifier les champs que vous souhaitez mettre à jour.Dites que vous voulez mettre à jour le nom puis vous serez faire comme ceci:

Ebean.update(user, new HashSet<String>(Arrays.asList("name")));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top