【发布时间】:2019-11-04 16:56:06
【问题描述】:
我正在尝试使用 H2 测试我的 JPA 原生 @Query。 我的原生查询如下:
@Query(
value = "SELECT * FROM accounts " +
" WHERE 'account_name' LIKE LOWER(CONCAT('%', COALESCE(:searchTerm, ''), '%')) ",
countQuery = "SELECT count(*) FROM accounts " +
" WHERE 'account_name' LIKE LOWER(CONCAT('%', COALESCE(:searchTerm, ''), '%')) ",
nativeQuery = true
)
在编写单元测试时,我收到以下 H2 错误:
原因:org.h2.jdbc.JdbcSQLException:找不到表“ACCOUNTS”; SQL 语句:SELECT * FROM accounts WHERE 'aws_account_name' LIKE LOWER(CONCAT('%', COALESCE(?, ''), '%')) 限制? [42102-197]
我可以通过更改我的 SQL 语法将表名放在双引号中来修复 H2 错误:
@Query(
value = "SELECT * FROM \"accounts\" " +
" WHERE 'account_name' LIKE LOWER(CONCAT('%', COALESCE(:searchTerm, ''), '%')) ",
countQuery = "SELECT count(*) FROM \"accounts\" " +
" WHERE 'account_name' LIKE LOWER(CONCAT('%', COALESCE(:searchTerm, ''), '%')) ",
nativeQuery = true
)
但是,然后我的 MySQL(实际非测试环境)抱怨:
Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL 语法;检查与您的 MySQL 服务器相对应的手册 在 '"accounts" WHERE 附近使用正确语法的版本 'account_name' LIKE LOWER(CONCAT('%', COALESCE('ab', ''), ' 在第 1 行
如何使用 MySQL 和 H2 测试这个原生查询?
我使用本机查询而不是 JPQL 的原因是因为我需要在不区分大小写的情况下进行搜索并允许“包含”匹配。
【问题讨论】: