Ошибка при загрузке Spring JPA с параметрами - PullRequest
2 голосов
/ 07 марта 2020
//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. Для этого варианта использования я пытаюсь запустить выбор для диапазона дат.

Спасибо

1 Ответ

1 голос
/ 07 марта 2020

В аннотации @Query используется неправильное поле. Query#name есть, чтобы указать именованный запрос. - В вашем случае следует использовать Query#value.

Также по умолчанию значение запроса анализируется как JPQL. Если вы хотите использовать SQL, вам нужно указать Query#nativeQuery как true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...