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/