【发布时间】:2023-04-05 06:12:01
【问题描述】:
我知道这可能听起来很傻,但我已经被这个问题困扰太久了!
我正在使用本机 SQL 查询通过 JPA 查询 PostgreSQL 存储库。我的一个查询如下所示:
@Query(value = "select * from gs where ?1 = ?2", nativeQuery = true)
public List<GsJsonStore> matchJson(String term, String value);
我正在使用:
List<GsJsonStore> list = repo.matchJson("subject", "'Sub'");
运行查询时列表为空,但是当我使用 PSQL 命令行运行相同的查询时:
select * from gs where subject = 'Sub';
我得到正确的输出,包含键值对的记录被返回。
我在哪里犯错了?
【问题讨论】:
-
调试时,得到什么查询字符串?
-
它们不是同一个查询。您在 JPA 中的本机查询转换为
... where 'subject' = '''Sub'''(这将始终给出空结果)。原生查询仍然使用准备好的语句,您不能将它们用于构建查询(它们只能用于绑定参数值)。 -
这是休眠跟踪:select * from gs where ? = ?绑定参数 [2] 作为 [VARCHAR] - ['Sub'] 绑定参数 [1] 作为 [VARCHAR] - [subject]
标签: sql hibernate postgresql