如何只能使用播放将特定字段集更新为数据库?目前我有一个包含特定字段的User模型,让您调用它:isAdministrator

private boolean isAdministrator;
.

,我有访问者方法:

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

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

但是,当我更改用户名时,通过不包含生成古代替代码的表单,播放重置我的用户对象,并为此用户设置值生成的值?

所以,我如何只更新更改的字段?

有帮助吗?

解决方案

我不直接回答你的问题,而不是拥有一个布尔表示你的用户是admin,而不是admin,我将创建一个从用户继承的世代odicetagcode类。

public class Admin extends User {
....
}
.

是“ s ”的 solid ; - )

编辑:

在控制器中,您可以在使用表单值更新之前从数据库中加载旧值:

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

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

User.update(userFromForm);
...
.

其他提示

除了 nico的答案之外,我只能添加,你不需要在每种情况下使用Form类。有时它足以让数据从请求中获取数据并手动更新您的对象,特别是当您具有详细的中间保存级别时特别适用于Ajax调用(请参阅使用 DynamicForm 它可以更短,也可以更短,也可以您可以自己验证

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

您可以指定要更新的字段。假设您想要更新名称那么你将这样做:

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top