Я пытаюсь реализовать метод для обновления записи в базе данных. Пока что я создал это:
public Optional<User> update(final Integer id,final UpdateUserDto dto) {
userRepository.findById(id).ifPresent((user -> {
user.setShop((dto.getShopId() == null) ? null : shopRepository.findById(dto.getShopId())
.orElseThrow(ShopNotFoundException::new));
user.setUsername(dto.getUsername());
user.setPassword(passwordEncoder.encode(dto.getPassword()));
user.setRoles(Arrays.asList(
roleRepository.findByRoleName(dto.getRole()).orElseThrow(RoleNotFoundException::new)
));
}));
return userRepository.findById(id);
}
Но теперь я добавил еще два поля в свой пользовательский объект (активированный, productAllowed), и я должен улучшить свой метод обновления, чтобы сделать их обновляемыми. Я могу это сделать, но у меня есть и другие сущности, и если я изменю их, это будет много, может быть, стандартного кода.
Есть ли лучший способ сделать это лучше или мне просто нужно продолжать устанавливать все поля вручную?
Я также думал об отражении, но в этом случае у меня есть несколько полей, которые нельзя точно скопировать из DTO в сущность (например, поле магазина, которое запрашивается из базы данных или поля роли).
И я также не думаю, что другой запрос для возврата нового объекта эффективен, но, хотя я устанавливаю свойства в слое сервиса, оригинальный возвращенный пользователь findById () обернут внутри Optional, поэтому я не Не думаю, что он будет обновлен.
Заранее спасибо.