Как обновить/сохранить только измененные поля

StackOverflow https://stackoverflow.com//questions/11690638

  •  12-12-2019
  •  | 
  •  

Вопрос

Как я могу обновить только определенный набор полей в базе данных с помощью Play?В настоящее время у меня есть 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 для этого пользователя?

Итак, как мне обновить только измененные поля?

Это было полезно?

Решение

Я не отвечаю на ваш вопрос, но вместо того, чтобы быть логическим, указывающим, что ваш пользователь является администратором или нет, я бы создал класс Admin, который наследует от пользователя.

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);
...
.

Другие советы

В дополнение к Нико ответ Могу только добавить, что вам не нужно использовать Form класс в любом случае.Иногда достаточно просто получить данные из запроса и обновить объект вручную, что полезно, особенно при вызовах ajax, когда у вас есть подробный уровень промежуточного сохранения (см. пример использования ДинамическаяФорма это может быть еще короче, а также ты можешь проверить это сам:

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