创建名为“customerRepository”的 bean 时出错:调用 init 方法失败;找不到类型 Customer 的属性 updateCustomer

问题描述 投票:0回答:2

使用 Spring Boot + JPA + Hibernate + PostgreSQL 进行 CRUD 操作

请是这个主题的新手。我正在尝试创建一个 CRUD Api。一切正常,但我无法使用 JpaRepository 获取 UPDATE 方法。我构建项目时没有错误。

我尝试将特定的 createCustomer 方法编码到我的 customerRepository 中,但仍然不起作用 enter image description here enter image description here

但是当我用 Maven 运行它时,我收到此错误:

jpa spring-boot spring-data spring-data-jpa
2个回答
0
投票

Spring data Repository 主要使用方法名称。它根据方法名称创建查询。例如,在您的存储库界面中,您有一个方法

findByUserId
。即使您没有编写任何查询,这也将起作用。怎么办?
spring-data 将制定查询以获取
findBy
之后指定的字段(在您的情况下为
UserId
)。但在编译时,它会检查您是否提供了有效的字段,以便它可以准备正确的查询。它通过检查该字段的实体类(在您的情况下是
Customer
)来实现这一点。

注意:请记住,实体中的字段称为

userId
,但存储库中的方法名称称为
UserId

保存、删除方法之所以有效,是因为您正在扩展 JPARepository 类(该类又扩展了其他类),该类具有这些方法。所以它开箱即用。

但是,当您编写任何超类中不存在的某些方法时,spring-data 将尝试按照我之前指定的方式自行制定查询。因此,当您编写像

updateCustomer
这样不在任何超类中的方法时,它会尝试在实体类中查找名为 updateCustomer 的字段,但会失败,因为它找不到,因此出现异常。

因此,如果您想声明或执行类似的操作,您可以通过使用

@Query(....)
注释此类方法并在其中提供正确的查询来完成此操作。

@Query(update customer set ..........)  
Customer updateCustomer(Customer customer)  

希望它清楚。


0
投票

不,它对我不起作用,我已经尝试了很多次查询注释,但最终失败了

© www.soinside.com 2019 - 2024. All rights reserved.