【问题标题】:JPA native query gives incorrect outputJPA 本机查询给出不正确的输出
【发布时间】: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


【解决方案1】:

您不能使用参数作为列名。您的查询解析为

select * from gs where 'subject' = '''Sub'''

编辑:刚刚看到@pozs 已经在评论中发布了相同的内容

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-26
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 2018-02-10
    相关资源
    最近更新 更多