首页 > 解决方案 > 如何使用 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 本机运算符。

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

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

图书馆:

谢谢你们的回复!

标签: postgresqlspring-data-jpajsonb

解决方案


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

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


推荐阅读