postgresql - 如何使用 Spring JpaRepository 转义问号(?)字符
问题描述
Postgres 定义了额外的 jsonb 操作符,例如?|
.
但是,使用 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 本机运算符。
试图用 ??| 逃避它 或 \?| 目前不工作。
注意:我也尝试使用自定义方言功能,但它以同样的问题结束。
图书馆:
- 休眠 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'])
推荐阅读
- javascript - Action for clicked marker on Google Map
- lodash - Rollupjs:忽略代码行
- tensorflow - Tensorflow 代码准确率没有提高
- css - Ionic 3 如何在自定义离子输入中垂直居中文本?
- javascript - 从匹配文本的位置获取值
- twilio - Twilio 可编程聊天消息数据
- c# - asp.net:如何通过特定行中的复选框更新 GridView 中的数据
- r - 使用 2 种不同颜色的线框绘图
- vba - 公式拖拽查询
- ibm-cloud - 尝试从 IBM Cloud 控制台供应 Analytics Engine 时出错:BXNIM0511E