Pergunta

Como posso atualizar apenas um determinado conjunto de campos no banco de dados com o Play?Atualmente tenho um User modelo que contém um campo específico, vamos chamá-lo: isAdministrator:

private boolean isAdministrator;

E eu tenho os métodos acessadores:

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

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

Mas quando mudo o nome de usuário, através de um formulário onde isAdministrator NÃO está incluído, o Play redefine meus objetos de usuário e define o valor 0 para este usuário?

Então, como posso atualizar apenas os campos alterados?

Foi útil?

Solução

Não respondo diretamente à sua pergunta, mas em vez de ter um booleano indicando que seu usuário é administrador ou não, eu criaria um Admin classe que herda do usuário.

public class Admin extends User {
....
}

É o "S" de SÓLIDO ;-)

EDITAR:

No controlador, você pode carregar o valor antigo do banco de dados antes de atualizar com os valores do formulário:

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

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

User.update(userFromForm);
...

Outras dicas

Além de Nico resposta só posso acrescentar que você não precisa usar Form classe em todos os casos.Às vezes é suficiente apenas obter os dados da solicitação e atualizar seu objeto manualmente, o que é útil especialmente com chamadas ajax quando você tem um nível detalhado de salvamento intermediário (veja exemplo de uso do Formulário Dinâmico pode ser ainda mais curto e também você mesmo pode validar:

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

Você pode especificar os campos que deseja atualizar.Digamos que você queira atualizar o nome então você fará assim:

Ebean.update(user, new HashSet<String>(Arrays.asList("name")));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top