题
如何只能使用播放将特定字段集更新为数据库?目前我有一个包含特定字段的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 {
....
}
.
编辑:
在控制器中,您可以在使用表单值更新之前从数据库中加载旧值:
...
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")));
. 不隶属于 StackOverflow