Spring boot 在Spring Boot中更新密码

Spring boot 在Spring Boot中更新密码,spring-boot,nativequery,Spring Boot,Nativequery,我想通过Thymeleaf更新我的密码。 到目前为止,一切都正常,除了我一调用我的更新方法就会收到一条错误消息 这是我的代码: @PostMapping 公共字符串updateOldPassword(@Valid@modeldAttribute(“密码”)密码更改userAndpassword, BindingResult结果,ModelMap模型){ if(result.hasErrors()){ 返回“错误”; } 字符串username=userAndpassword.getUsernam

我想通过Thymeleaf更新我的密码。 到目前为止,一切都正常,除了我一调用我的更新方法就会收到一条错误消息

这是我的代码:

@PostMapping
公共字符串updateOldPassword(@Valid@modeldAttribute(“密码”)密码更改userAndpassword,
BindingResult结果,ModelMap模型){
if(result.hasErrors()){
返回“错误”;
}
字符串username=userAndpassword.getUsername();
字符串password=userAndpassword.getPassword();
字符串newPassword=passwordEncoder.encode(密码);
passwordRepo.updatePassword(用户名、新密码);
返回“重定向:/”;
}
公共接口更新DPasswordRepository扩展了JpaRepository{
@修改
@查询(value=“UPDATE benutzer SET passwort=?其中benutzername=?”,nativeQuery=true)
void updatePassword(字符串benutzername,字符串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)
也许有人能帮我

谢谢。

我发现了问题。 我不得不使用

@Transactional
也是

以下是完整的代码:

公共接口更新DPasswordRepository扩展了JpaRepository{
@修改
@查询(value=“UPDATE benutzer SET passwort=:passwort,其中benutzername=:benutzername”,nativeQuery=true)
@交易的
void updatePassword(@Param(“benutzername”)字符串benutzername,@Param(“passwort”)字符串passwort);
}