Spring Data JPA Native Query - 如何使用 Postgres ARRAY 类型作为参数

Ale*_*sov 5 sql postgresql spring-data-jpa jsonb

我有一个本机 postgresql 查询(opts - jsonb 数组):

select * from table users jsonb_exists_any(opts, ARRAY['CASH', 'CARD']);
Run Code Online (Sandbox Code Playgroud)

它在我的数据库控制台中运行良好,我得到了结果:

user1, ['CASH','CARD']
user2, ['CASH']
user3, ['CARD']
Run Code Online (Sandbox Code Playgroud)

但是当我想在我的 spring data jpa 应用程序中使用它时:

user1, ['CASH','CARD']
user2, ['CASH']
user3, ['CARD']
Run Code Online (Sandbox Code Playgroud)

我收到错误:

hejsSqlExceptionHelper - SQL 错误:0,SQLState:42883 hejsSqlExceptionHelper - 错误:函数 jsonb_exists_any(jsonb, record[]) 不存在

因为该查询转换为:

@Query(value = "select * from users where jsonb_exists_any(opts, ARRAY[?1])", nativeQuery = true)
List<Users> findUsers(Set<String> opts);
Run Code Online (Sandbox Code Playgroud)

有没有办法将参数作为数组传递?即没有括号?, ?

sou*_*ung 6

你能试试这个吗:

@Query(value = "select * from users where jsonb_exists_any(opts, string_to_array(?1, ','))", nativeQuery = true)
List<Users> findUsers(String listStringSeparatedByComma);
Run Code Online (Sandbox Code Playgroud)

请注意,您必须将 Set 参数替换为字符串。

  • 是的,您的解决方案有效,但我很好奇是否有一个选项可以以某种方式使用列表或数组而不将值转换和连接到字符串 (2认同)