首页 > 解决方案 > 带有参数的 Spring Boot JPA 出错

问题描述

//Repository class

@Repository

public interface FlowsPageRepository extends PagingAndSortingRepository<FlowsPageView, String> {
    @Query(name = "select * from flows_page_view f where f.datepst between ?1 and ?2")
    List<FlowsPageView> findScoresByDate(String startDate, String endDate);
 }

//Controller class
 @RestController
 public class ApiController {
    private final FlowsPageRepository flowsPageRepository;

    @RequestMapping(path = "/api/scores/{startdate}/{enddate}")
    public List<FlowsPageView> getScoresDataByDate(@PathVariable("startdate") String 
       startDate, @PathVariable("enddate") String endDate) {

       return flowsPageRepository.findScoresByDate(startDate, endDate);
    }
 }

When I am trying to run this project I am getting the following error:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flowsPageRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.List com.expedia.fcts.houston.FlowsPageRepository.findScoresByDate(java.lang.String,java.lang.String)! At least 2 parameter(s) provided but only 1 parameter(s) present in query.
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1745)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)

知道我在这里做错了什么吗?当我只使用像 startDate 这样的一个参数时,此代码运行良好,但当我添加 endDate 时,它​​给了我这个错误。对于这个用例,我正在尝试针对日期范围运行选择。

谢谢

标签: spring-bootjpa

解决方案


@Query注释使用了错误的字段。Query#name是否有指定命名查询。-Query#value应该在您的情况下使用。

此外,默认情况下,查询值被解析为 JPQL。如果要使用 SQL,则需要指定Query#nativeQuerytrue.


推荐阅读