Обновление пароля в Spring Boot Thymeleaf - PullRequest
0 голосов
/ 20 октября 2018

Я хочу обновить свой пароль через Thymeleaf.Пока что все работает, кроме того, как только я вызываю свой метод обновления, я получаю сообщение об ошибке.

Это мой код:

    @PostMapping
    public String updateOldPassword(@Valid @ModelAttribute("password") PasswordChange userAndpassword,
                BindingResult result, ModelMap model) {

        if (result.hasErrors()) {
            return "error";
        }

        String username = userAndpassword.getUsername();
        String password = userAndpassword.getPassword();

        String newPassword = passwordEncoder.encode(password);

        passwordRepo.updatePassword(username, newPassword);
        return "redirect:/";
    }

    public interface updateOldPasswordRepository extends JpaRepository<Benutzer, Long>{
        @Modifying
        @Query(value = "UPDATE benutzer SET passwort = ? WHERE benutzername = ?", nativeQuery = true)
        void updatePassword(String benutzername, String passwort);
    }

Когда он пытается обновить мой пароль, я получаюэто сообщение об ошибке:

ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query] with root cause
javax.persistence.TransactionRequiredException: Executing an update/delete query
    at org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1496)
    at org.springframework.data.jpa.repository.query.JpaQueryExecution$ModifyingExecution.doExecute(JpaQueryExecution.java:256)
    at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:91)
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:136)
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:125)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:590)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:578)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:59)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)

Может быть, кто-то может мне помочь, пожалуйста.

Спасибо.

1 Ответ

0 голосов
/ 20 октября 2018

Я нашел проблему.Мне пришлось использовать

@Transactional

тоже.

Вот полный код:

    public interface updateOldPasswordRepository extends JpaRepository<Benutzer, Long>{
        @Modifying
        @Query(value = "UPDATE benutzer SET passwort = :passwort WHERE benutzername = :benutzername", nativeQuery = true)
        @Transactional
        void updatePassword(@Param("benutzername") String benutzername, @Param("passwort") String passwort);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...