Я бы предложил отделить ваш код переднего плана от логики для того, что будет сохранено в базе данных. Объект поддержки формы просто предназначен для того, чтобы быть простым объектом, который захватывает то, что пользователь сделал в представлении ... его не следует использовать для сохранения непосредственно в базе данных. Я бы хотел, чтобы сервисный уровень обрабатывал решение о том, обновлять или нет определенные поля ... контроллер должен просто получать входные данные и передавать их. Таким образом, служба может решить, какие поля следует обновить.
public void updateUser(long userId, User updatedUser) {
User currentUser = dao.getCurrentUserById(userId);
currentUser.userName = updatedUser.username;
//...... update anyother fields....
dao.SaveUser(currentUser);
}
или вы можете определить метод так, чтобы вызывающая сторона знала, что будет обновлено:
public void updateUser(long userId, String updatedUsername);
Я бы также сказал, что это намного проще для модульного тестирования, если эта логика находится на уровне обслуживания.
Надеюсь, это поможет