【问题标题】:Query creation method gives error查询创建方法给出错误
【发布时间】:2018-07-23 22:38:42
【问题描述】:

我的实体有一个类似

的字段
@Column(name = "workflow_status", columnDefinition = "nvarchar(255)")
private String workflow_status;

所以在我的 Controller 中我想通过 workflow_status 获取条目,我编写了 JPA 提供的 Query 方法

List<Programme> findByWorkflow_status(String workflow_status);

但这会出错

Caused by: java.lang.IllegalArgumentException: Failed to create query method public abstract java.util.List com.taap.backend.programmes.repositories.ProgRepo.findByWorkflow_status(java.lang.String)! No property workflow found for type Programme!
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:76) ~[spring-data-jpa-1.11.9.RELEASE.jar:na]
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:101) ~[spring-data-jpa-1.11.9.RELEASE.jar:na]
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:207) ~[spring-data-jpa-1.11.9.RELEASE.jar:na]
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:77) ~[spring-data-jpa-1.11.9.RELEASE.jar:na]
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport.java:451) ~[spring-data-commons-1.13.9.RELEASE.jar:na]
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:224) ~[spring-data-commons-1.13.9.RELEASE.jar:na]
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:277) ~[spring-data-commons-1.13.9.RELEASE.jar:na]
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:263) ~[spring-data-commons-1.13.9.RELEASE.jar:na]
at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:101) ~[spring-data-jpa-1.11.9.RELEASE.jar:na]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]
... 48 common frames omitted
Caused by: org.springframework.data.mapping.PropertyReferenceException: No property workflow found for type Programme!
at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:77) ~[spring-data-commons-1.13.9.RELEASE.jar:na]
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:329) ~[spring-data-commons-1.13.9.RELEASE.jar:na]
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:309) ~[spring-data-commons-1.13.9.RELEASE.jar:na]
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:272) ~[spring-data-commons-1.13.9.RELEASE.jar:na]
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:243) ~[spring-data-commons-1.13.9.RELEASE.jar:na]
at org.springframework.data.repository.query.parser.Part.<init>(Part.java:76) ~[spring-data-commons-1.13.9.RELEASE.jar:na]
at org.springframework.data.repository.query.parser.PartTree$OrPart.<init>(PartTree.java:247) ~[spring-data-commons-1.13.9.RELEASE.jar:na]
at org.springframework.data.repository.query.parser.PartTree$Predicate.buildTree(PartTree.java:398) ~[spring-data-commons-1.13.9.RELEASE.jar:na]
at org.springframework.data.repository.query.parser.PartTree$Predicate.<init>(PartTree.java:378) ~[spring-data-commons-1.13.9.RELEASE.jar:na]
at org.springframework.data.repository.query.parser.PartTree.<init>(PartTree.java:89) ~[spring-data-commons-1.13.9.RELEASE.jar:na]
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:70) ~[spring-data-jpa-1.11.9.RELEASE.jar:na]
... 58 common frames omitted

非常感谢任何帮助! :)

【问题讨论】:

  • 重命名您的属性以遵循 java 约定,这些东西可能会起作用private String workflowStatus
  • 谢谢。完全忘记了约定。
  • 请分享您通过workFlowStatus选择程序的方法。我认为你有语法错误。

标签: spring spring-boot spring-data-jpa jpql


【解决方案1】:

spring JPA 中的下划线(_) 字符具有保留含义。

  • 或者,更改变量的名称,强烈建议这样做。

改变

private String workflow_status;

private String workflowStatus;

List<Programme> findByWorkflow_status(String workflow_status);

List<Programme> findByWorkflowStatus(String workflow_status);
  • 或者,使用另一个下划线对字符进行转义。

类似这样的:

List<Programme> findByWorkflow__status(String workflow_status);

有关更多信息,请参阅文档here

【讨论】:

  • 另一个问题,我们可以使用这些查询方法来获取单个列的数据而不是整个行吗?像findNameById(Integer id) 这样nameid 是实体变量吗?
  • 不幸的是,没有办法直接做到这一点。您可以使用@Query 注释,如下所示:@Query("select name from programme where id = :id") Integer findNameById(Integer id); 有关更多信息,请参阅this
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多