Как эффективно обновить запись, используя hibernate & jparepository - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь реализовать метод для обновления записи в базе данных. Пока что я создал это:

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, поэтому я не Не думаю, что он будет обновлен.

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...