質問

プレイを使用してデータベースに特定のフィールドセットのみを更新する方法現在私は特定のフィールドを含む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")));
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top