微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将字符串列表作为参数传递给 JPA 本机查询并在 Postgresql ARRAY[] 中替换它

如何解决如何将字符串列表作为参数传递给 JPA 本机查询并在 Postgresql ARRAY[] 中替换它

我有一个 JPA 原生查询,它看起来像这样

@Query(
value = "SELECT * FROM feature f where jsonb_exists_any(f.feature_json -> 'properties' -> 'ids',array[:ids])",nativeQuery = true)

feature_json 是一个 jsonb 列,:ids 是我需要传递给查询的输入参数,它是一个 UUID 字符串列表

查询示例值如下

SELECT * FROM feature f where jsonb_exists_any(f.feature_json -> 'properties' -> 'ids',array['79eeb7ae-c2d0-3344-a6f5-eb424b820d03','a14bdb38-cedb-3743-bd50-9562ed2856b2'])

当我在 Java 中将上述值作为字符串列表传递时,查询无法执行,因为 :ids 中的值被替换为 (79eeb7ae-c2d0-3344-a6f5-eb424b820d03,a14bdb38-cedb-3743-bd50-9562ed2856b2) 而不是所需的 '79eeb7ae-c2d0-3344-a6f5-eb424b820d03','a14bdb38-cedb-3743-bd50-9562ed2856b2'

我还尝试将此引用的逗号分隔值作为字符串传递给 :ids 参数,查询执行时没有任何错误,但未获取任何结果。

如何将 Java 中的 uuid 字符串列表作为参数传递给上面指定的本机查询

解决方法

更新:

我修改了查询如下:

@Query(
value = "SELECT * FROM feature f where jsonb_exists_any(f.feature_json -> 'properties' -> 'ids',:ids)",nativeQuery = true)
List<FeatureEntity> getFeaturesByIds(@Param("ids") TypedParameterValue ids);

并从调用函数中传入new TypedParameterValue(StringArrayType.INSTANCE,stringArray)

stringArray 在查询执行期间被转换为 postgresql 文本数组,并且查询返回预期响应。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。