Pregunta

¿Cómo puedo actualizar solo un conjunto particular de campos en la base de datos con Play?Actualmente tengo un User modelo que contiene un campo específico, llamémoslo: isAdministrator:

private boolean isAdministrator;

Y tengo los métodos de acceso:

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

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

Pero cuando cambio el nombre de usuario, a través de un formulario donde isAdministrator NO está incluido, Play restablece mis objetos de usuario y establece el valor 0 para este usuario?

Entonces, ¿cómo puedo actualizar sólo los campos modificados?

¿Fue útil?

Solución

No respondo directamente a tu pregunta, pero en lugar de tener un valor booleano que indique si tu usuario es administrador o no, crearía un Admin clase que hereda del Usuario.

public class Admin extends User {
....
}

Es el "S" de SÓLIDO ;-)

EDITAR:

En el controlador, puede cargar el valor anterior de la base de datos antes de actualizar con los valores del formulario:

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

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

User.update(userFromForm);
...

Otros consejos

Además de nico respuesta solo puedo agregar, que no necesitas usar Form clase en todos los casos.A veces es suficiente simplemente obtener datos de la solicitud y actualizar su objeto manualmente, lo cual es útil especialmente con llamadas ajax cuando tiene un nivel detallado de guardado intermedio (vea el ejemplo de uso de Formulario dinámico puede ser incluso más corto y también puedes validarlo tu mismo:

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

Puede especificar los campos que desea actualizar.Diga que desea actualizar el nombre , entonces lo harás así:

Ebean.update(user, new HashSet<String>(Arrays.asList("name")));

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top