如何使用休眠和jparepository有效地更新记录

时间:2019-06-27 07:04:06

标签: java hibernate spring-boot jpa

我正在尝试实现一种用于更新数据库记录的方法。到目前为止,我创建了这个:

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复制到实体(例如,从数据库查询的shop字段或角色字段)。

我也不认为用于返回新对象的另一个查询是有效的,但是尽管我在服务层中设置了属性,但是原始的findById()返回的用户被包装在Optional中,所以我不这样做'认为不会更新。

谢谢。

0 个答案:

没有答案