Частичное обновление с помощью PatchMapping и JpaRepository - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть следующие отношения сущностей:

Person {
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id", referencedColumnName = "id")
private User user;
}


User {
@OneToOne(mappedBy = "user")
private Person person;
}

Если пользователю необходимо обновить пароль, ему не нужно отправлять Полное лицо и Пользователь, только текущий пароль и новый пароль. хорошо?

Но Jparepository содержит метод save; что, если объект не новый, то создать, если не обновить. Но как я могу обновить существующие данные, обновляя только некоторые поля и поля идентификатора, такие как id или mail?

У меня были проблемы с сохранением созданного файла вместо обновления существующих данных.

Так. Лучший способ - найти сущность по идентификатору перед обновлением и объединить с новыми данными или лучше добавить запрос jpql, например:

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

    Optional<User> findByCodLogin(final String login);


    @Transactional
    @Modifying
    @Query("update user u set u.password = :newPassword where u.codLogin = :login")
    int updatePassword(@Param("newPassword ") String newPassword , @Param("login") String login);

}
...