postgresql - 如何使用 Spring JpaRepository 转义问号 (?) 字符

标签 postgresql spring-data-jpa jsonb

Postgres 定义 additional jsonb Operators例如 ?|

但是,使用 Spring JpaRepository 查询生成器时,询问字符始终被视为参数,我不知道如何转义它(除了在单引号字符串中,但查询无效)。

例子:

@Query(value = "SELECT * FROM public.user u WHERE u.authorities ?| array['ROLE_1', 'ROLE_2']", nativeQuery = true)

错误:

java.lang.IllegalArgumentException: Unable to resolve given parameter name [1] to QueryParameter reference
    at org.hibernate.query.internal.QueryParameterBindingsImpl.resolveQueryParameter(QueryParameterBindingsImpl.java:520)
    at org.hibernate.query.internal.QueryParameterBindingsImpl.getQueryParameterListBinding(QueryParameterBindingsImpl.java:498)
    at org.hibernate.query.internal.AbstractProducedQuery.setParameterList(AbstractProducedQuery.java:560)

有没有办法逃避它,或者有不同的解决方案来使用这些包含 ? 字符的 postgres native 运算符。

试图用 ??| 逃避它或\?|目前不工作。

注意:我也尝试过使用自定义方言功能,但它以同样的问题结束。

图书馆:

  • 休眠 5.2.16
  • 休眠-jpa 2.1
  • spring-data-jpa 2.0.6.RELEASE
  • postgresql 42.2.2

谢谢大家的回复!

最佳答案

您可以直接调用函数 jsonb_exists_any()。 所以在你的情况下会是

jsonb_exists_any(u.authorities::jsonb, array['ROLE_1', 'ROLE_2'])

关于postgresql - 如何使用 Spring JpaRepository 转义问号 (?) 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50464741/

相关文章:

java - Hibernate 使用 @ManyToMany 双向关系导致无限循环

postgresql - 使用 Ecto 在 postgres 中生成_series 并将空值检索为 “0”

java - 调用资源的 createOrWaitForConnection 方法时连接不可用?

java - 按示例查询跳过原语?

java - PostgreSQL 的 JPA 查询

postgresql - PostgreSQL 在哪里存储配置/conf 文件?

PostgreSQL:如何修改/复制之前的文本

java - 使用 @autowired 到 DI 后得到一个 null 对象

knex.js - 使用 knex 从 postgresql jsonb 检索特定 key

postgresql jsonb 不区分大小写的查询