QuerySyntaxException: неожиданный токен - PullRequest
0 голосов
/ 05 декабря 2018

Я определил этот запрос в репозитории JPA

  @org.springframework.data.jpa.repository.Query("select min(cur.volumeUsd24h), max(cur.volumeUsd24h), "
        + "min(marketCapUsd),       man(marketCapUsd), "
        + "min(availableTickets),   man(availableTickets), "
        + "min(totalTickets),       man(totalTickets)  "
        + "min(maxTickets),             man(maxTickets)  "
        + "from Tickets cur  ")
  Object[] findQueryFiltersValues ();

, но при запуске приложения я получил эту ошибку:

Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: min near line 1, column 211 [select min(cur.volumeUsd24h), max(

Я также пытался

@Query(value = "select min(cur.volume_usd_24h), max(cur.volume_usd_24h), "
        + "min(market_cap_usd),       max(market_cap_usd), "
        + "min(available_tickets),   max(available_tickets), "
        + "min(total_tickets),       max(total_tickets)  "
        + "min(max_tickets),             max(max_tickets)  "
        + "from tickets cur  ",nativeQuery = true)

но я получил ошибку компиляции:

Multiple markers at this line
    - Syntax error on token ",", [ expected
    - Syntax error, insert "]" to complete 
     Expression

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Предполагая, что man на самом деле max, в исходном запросе есть синтаксическая ошибка, поэтому исключение.После max(totalTickets) стоит без запятой , что делает запрос max(totalTickets) min(maxTickets).См. этот образец на основе опубликованного кода, который показывает исправленный запрос в действии

0 голосов
/ 05 декабря 2018

Репозиторий JPA не поддерживает функции min, max.

Вам следует изменить свой запрос на собственный sql (заменить поля POJO на имена столбцов БД)

и добавить атрибут nativeQuery = true.

Примерно так

@Query(value = "select min(cur.volume_usd_24h), max(cur.volume_usd_24h), "
        + "min(market_cap_usd),       max(market_cap_usd), "
        + "min(available_tickets),   max(available_tickets), "
        + "min(total_tickets),       max(total_tickets)  "
        + "min(max_tickets),             max(max_tickets)  "
        + "from tickets cur  ",nativeQuery = true)
...