変更フィールドのみを更新/保存する方法
-
12-12-2019 - |
質問
プレイを使用してデータベースに特定のフィールドセットのみを更新する方法現在私は特定のフィールドを含む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;
}
.
しかし、isAdministrator
が含まれていないフォームを介してユーザー名を変更すると、PLAYはユーザーオブジェクトをリセットし、このユーザーの値0
を設定しますか?
SO、変更されたフィールドのみを更新する方法は?
解決
私はあなたの質問に直接答えないが、あなたのユーザーがadminであるかどうかを示すブール値を持つ代わりに、私はユーザーから継承するAdmin
クラスを作成します。
public class Admin extends User {
....
}
.
それは " solid ; - )
編集:
コントローラでは、フォーム値で更新する前にデータベースから古い値をロードできます。
...
User userFromDB = User.findById(anId);
User userFromForm = userForm.get();
// set previous value
userFromForm.setArchived(userFromDB.getArchived());
User.update(userFromForm);
...
. 他のヒント
nicoの回答に加えて、すべての場合にForm
クラスを使用する必要がないことを追加できます。要求からデータを取得して、特に詳細なレベルの中間保存の詳細レベルがある場合に特に便利なオブジェクトを手動で更新するだけで十分な場合があります( dynamicform それはさらに短く、またあなたはそれを自分で検証することができます:
public static Result updateName(Integer id){
User user = User.find.byId(id);
user.name = form().bindFromRequest().get("name");
user.update(id);
return ok();
}
. 更新したいフィールドを指定できます。 name を更新したいと言ってから、このようにします。
Ebean.update(user, new HashSet<String>(Arrays.asList("name")));
. 所属していません StackOverflow