ola*_*ell 18 java jpa spring-data-jpa spring-boot hibernate-types
我正在使用 JPA 查询更新一些 Spring Boot 应用程序。除了一种特定类型的查询 ( findByJsonNode)之外,一切正常。这在早期版本中运行良好,但在我升级后,我的 bean 无法创建。
它在 Spring Boot2.1.4.RELEASE和 spring cloud version 上运行良好Greenwich.SR1,但是当我升级到 Spring Boot2.2.4.RELEASE和 spring cloud version 时Hoxton.RELEASE,Spring 无法创建我的存储库 bean。
Caused by: java.lang.IllegalStateException: Operator SIMPLE_PROPERTY on searchDto requires a scalar argument, found class com.fasterxml.jackson.databind.JsonNode in method public abstract se.company.search.Search se.company.search.SearchRepository.findFirstBySearchDto(com.fasterxml.jackson.databind.JsonNode).
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.throwExceptionOnArgumentMismatch(PartTreeJpaQuery.java:171)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.validate(PartTreeJpaQuery.java:147)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:90)
... 73 common frames omitted.
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.throwExceptionOnArgumentMismatch(PartTreeJpaQuery.java:171) ~[spring-data-jpa-2.2.4.RELEASE.jar:2.2.4.RELEASE]
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.validate(PartTreeJpaQuery.java:147) ~[spring-data-jpa-2.2.4.RELEASE.jar:2.2.4.RELEASE]
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:90) ~[spring-data-jpa-2.2.4.RELEASE.jar:2.2.4.RELEASE]
... 74 common frames omitted
Run Code Online (Sandbox Code Playgroud)
存储库类如下所示
Caused by: java.lang.IllegalStateException: Operator SIMPLE_PROPERTY on searchDto requires a scalar argument, found class com.fasterxml.jackson.databind.JsonNode in method public abstract se.company.search.Search se.company.search.SearchRepository.findFirstBySearchDto(com.fasterxml.jackson.databind.JsonNode).
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.throwExceptionOnArgumentMismatch(PartTreeJpaQuery.java:171)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.validate(PartTreeJpaQuery.java:147)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:90)
... 73 common frames omitted.
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.throwExceptionOnArgumentMismatch(PartTreeJpaQuery.java:171) ~[spring-data-jpa-2.2.4.RELEASE.jar:2.2.4.RELEASE]
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.validate(PartTreeJpaQuery.java:147) ~[spring-data-jpa-2.2.4.RELEASE.jar:2.2.4.RELEASE]
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:90) ~[spring-data-jpa-2.2.4.RELEASE.jar:2.2.4.RELEASE]
... 74 common frames omitted
Run Code Online (Sandbox Code Playgroud)
实体
@Repository
public interface SearchRepository extends PagingAndSortingRepository<Search, String> {
Search findFirstBySearchDto(JsonNode searchDto);
}
Run Code Online (Sandbox Code Playgroud)
smy*_*hie 56
我遇到了同样的问题。我通过在它的末尾添加“In”来更改我的方法的名称来解决它。
对于您的示例,它将是
findAllByTagsIn(java.util.Set)
Run Code Online (Sandbox Code Playgroud)
请参阅此处的“方法名称中支持的关键字”表:https : //docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation
Sub*_*der 11
当您使用列值列表作为谓词搜索实体时,必须在列名称末尾使用“In”子句。你可以使用无误
List<Entity> findAllByEntityColumnIn(Iterable<Long> EntityColumns);
Run Code Online (Sandbox Code Playgroud)
注意:它在我的项目上经过 100% 测试。
如果您正在使用存储库并尝试根据 Set 类型的参数获取列表,则在编写查询时应该小心!就我而言:
findAllBySchoolId(Set<Long> schoolIds) // wrong
findAllBySchoolIdIn(Set<Long> schoolIds) // correct
Run Code Online (Sandbox Code Playgroud)
致谢用户:8569305(smythie)!
| 归档时间: |
|
| 查看次数: |
10988 次 |
| 最近记录: |