我试图从jsonb字段(数组)中按条件查找记录。我使用了jsonb_exists_all函数。我写了一个可以工作的SQL,但是我遇到了用参数绑定创建正确的Java代码(Jooq)的问题。
例如,表结构
CREATE TABLE mytable (
id int,
data jsonb
);
INSERT INTO mytable VALUES
(1, '{"roles": ["ONE", "TWO", "FIVE"]}'),
(2, '{"roles": ["ONE", "SIX"]}');
字符串
在我的原始SQL查询中,我是按数组值搜索的。这份工作
SELECT
id,
data
FROM
mytable
WHERE
jsonb_exists_all(mytable.data -> 'roles', array['ONE','TWO'])
型
在下一步中,我将尝试编写Java代码,并且在实现安全请求的绑定(参数)方面遇到了一些问题。
String args = "'ONE','TWO'";
Flux.from(dsl.selectFrom(MyTable.MYTABLE)
.where(noCondition().and("jsonb_exists_all(parameters -> 'roles', array[" + args + "])")))
.map(record -> record.into(MyTableDto.class))
.collectList();
型
有没有可能在没有连接的情况下进行绑定?
我会很感激的!
1条答案
按热度按时间c9x0cxw01#
首先,with jOOQ, you should never concatenate strings。总有更好的办法。
在你的例子中,你可以使用plain SQL templates如下:
字符串
这是使用:
DSL::val
创建bind valuesDSL::inline
创建inline values