我有一个原生的PostgreSQL查询(选项为JSONB数组):
select * from table users jsonb_exists_any(opts, ARRAY['CASH', 'CARD']);
在我的数据库控制台中它正常工作,我得到了一个结果:
user1, ['CASH','CARD']
user2, ['CASH']
user3, ['CARD']
但是当我想在我的Spring Data JPA应用程序中使用它时:
@Query(value = "select * from users where jsonb_exists_any(opts, ARRAY[?1])", nativeQuery = true)
List<Users> findUsers(Set<String> opts);
我遇到了一个错误:
h.e.j.s.SqlExceptionHelper - SQL错误:0,SQL状态:42883 h.e.j.s.SqlExceptionHelper - 错误:函数jsonb_exists_any(jsonb, record[])不存在
因为这个查询被转换成了:
select
*
from
users
where
jsonb_exists_any(opts, ARRAY[(?, ?)])
有没有一种方法可以将参数作为数组传递?例如,不需要在 ?, ?
周围加上括号。
CREATE OR REPLACE FUNCTION wrap_varchar(VARIADIC params VARCHAR[]) RETURNS SETOF VARCHAR[] AS $$ SELECT params; $$ LANGUAGE SQL;
然后SELECT jsonb_exists_any('{"name": "Joe Smith", "age": 28, "sports": ["football"]}', wrap_varchar('age','address'));
这可以与Spring Data一起使用。您可以将'age','address'
替换为:filter
。 - damike