【问题标题】:QuerySyntaxException: unexpected tokenQuerySyntaxException:意外令牌
【发布时间】:2019-05-07 06:27:21
【问题描述】:

我已经在 J​​PA 存储库中定义了这个查询

  @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

【问题讨论】:

  • 假设man实际上是max,原来的查询有语法错误,这就是异常的原因。 max(totalTickets) 之后没有逗号,这使得查询 max(totalTickets) min(maxTickets)。根据发布的代码查看this sample,该代码显示了正确的查询。
  • @manish,请转换为答案

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


【解决方案1】:

JPA 存储库不支持 min、max 函数。

您应该将查询更改为原生 sql(将 POJO 字段替换为 DB 列名)

并添加 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)

【讨论】:

【解决方案2】:

假设man其实是max,原来的查询有语法错误,这就是异常的原因。 max(totalTickets) 后面没有逗号,这使得查询max(totalTickets) min(maxTickets)。根据发布的代码查看this sample,该代码显示了正确的查询

【讨论】:

    猜你喜欢
    • 2017-04-17
    • 2021-09-05
    • 2019-06-24
    • 2016-05-30
    • 2019-05-14
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 2015-05-21
    相关资源
    最近更新 更多