首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >本机查询只导致H2数据库中的错误

本机查询只导致H2数据库中的错误
EN

Stack Overflow用户
提问于 2022-09-15 12:48:45
回答 1查看 236关注 0票数 1

我有一个在MySQL数据库上运行的查询,但不运行在h2上。

这是我的存储库:

代码语言:javascript
运行
复制
 @Query(value = "SELECT r.* FROM rewards r "
      + "INNER JOIN models m ON r.model_id = m.model_pk  "
      + "WHERE m.printer_family = :businessPrinterFamily "
      + "AND r.reward_type IN (:rewardTypes) "
      + "AND IF(:isOpportunities, m.model_pk IN (:businessPrinterModels), TRUE) "
      + "ORDER BY :sortingMethod",
      countQuery = "SELECT r.* FROM rewards r "
          + "INNER JOIN models m ON r.model_id = m.model_pk  "
          + "WHERE m.printer_family = :businessPrinterFamily "
          + "AND r.reward_type IN (:rewardTypes) "
          + "AND IF(:isOpportunities, m.model_pk IN (:businessPrinterModels), TRUE) ",
      nativeQuery = true)
  List<Reward> getFilteredRewards(@Param("sortingMethod") String sortingMethod,
      @Param("isOpportunities") boolean isOpportunities,
      @Param("businessPrinterModels") List<Integer> businessPrinterModels,
      @Param("rewardTypes") List<Integer> rewardTypes,
      @Param("businessPrinterFamily") int businessPrinterFamily, Pageable pageable);

但是,只有在h2上,我才得到以下错误:

代码语言:javascript
运行
复制
could not prepare statement; SQL [SELECT r.* FROM rewards r INNER JOIN models m ON r.model_id = m.model_pk  WHERE m.printer_family = ? AND r.reward_type IN (?, ?) AND IF(?, m.model_pk IN (?), TRUE) ORDER BY ? limit ?]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement
org.springframework.dao.InvalidDataAccessResourceUsageException: could not prepare statement; SQL [SELECT r.* FROM rewards r INNER JOIN models m ON r.model_id = m.model_pk  WHERE m.printer_family = ? AND r.reward_type IN (?, ?) AND IF(?, m.model_pk IN (?), TRUE) ORDER BY ? limit ?]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement
...
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "SELECT r.* FROM rewards r INNER JOIN models m ON r.model_id = m.model_pk  WHERE m.printer_family = ? AND r.reward_type IN (?, ?) AND [*]IF(?, m.model_pk IN (?), TRUE) ORDER BY ? limit ?"; expected "INTERSECTS (, NOT, EXISTS, UNIQUE, INTERSECTS"; SQL statement:
SELECT r.* FROM rewards r INNER JOIN models m ON r.model_id = m.model_pk  WHERE m.printer_family = ? AND r.reward_type IN (?, ?) AND IF(?, m.model_pk IN (?), TRUE) ORDER BY ? limit ? [42001-214]

在日志中,我得到以下内容:

代码语言:javascript
运行
复制
2022-09-15 09:35:15.647 ERROR 267713 --- [    Test worker] o.h.engine.jdbc.spi.SqlExceptionHelper   : Syntax error in SQL statement "SELECT r.* FROM rewards r INNER JOIN models m ON r.model_id = m.model_pk  WHERE m.printer_family = ? AND r.reward_type IN (?, ?) AND [*]IF(?, m.model_pk IN (?), TRUE) ORDER BY ? limit ?"; expected "INTERSECTS (, NOT, EXISTS, UNIQUE, INTERSECTS"; SQL statement:
SELECT r.* FROM rewards r INNER JOIN models m ON r.model_id = m.model_pk  WHERE m.printer_family = ? AND r.reward_type IN (?, ?) AND IF(?, m.model_pk IN (?), TRUE) ORDER BY ? limit ? [42001-214]

我的h2数据库配置如下:

代码语言:javascript
运行
复制
spring:
  datasource:
    url: jdbc:h2:mem:testdb;MODE=MySQL
    username: sa
    password:
    driver-class-name: org.h2.Driver
  jpa:
    defer-datasource-initialization: false
  h2:
    console:
      enabled: true
      path: /h2-console

有什么不好的想法吗?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73731442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档