gpt4 book ai didi

java - jOOQ - 多重绑定(bind)

转载 作者:太空宇宙 更新时间:2023-11-04 14:10:12 25 4
gpt4 key购买 nike

我有一个绑定(bind)值的映射:

final Map<String, Object> values = ...;

在执行查询之前,我循环遍历绑定(bind)参数并绑定(bind)其值,如下所示:

final ResultQuery<Record> q = ...;

for (final Param p : q.getParams().values()) {
if (p.getParamName() != null) {
q.bind(p.getParamName(), values.get(p.getParamName()));
}
}

当多次使用相同的绑定(bind)时,这似乎会失败:

final ResultQuery<Record> q = create.select().from(DSL.table("my_table"))
.where((DSL.field("identifier").eq(DSL.param("binding"))
.and(DSL.field("identifier").eq(DSL.param("binding")))));

... code above ...

create.fetch(q);

在生成的查询中,仅填写了一个绑定(bind)。另一个是 null .

有其他方法吗?相同的绑定(bind)参数只能使用一次,或者这是一个错误?

(我知道这个查询没有多大意义,它只是为了演示问题。)

如果我们可以执行以下操作,问题可能会得到解决,但这是不可能的,因为 getParams()返回Param<?>而不是Param<Object> :

for (final Param p : q.getParams().values()) {
if (p.getParamName() != null) {
p.bind(values.get(p.getParamName()));
}
}

更新 - 上面的陈述不正确,因为 getParams()返回 Map<String, Param>而不是Map<String, Collection<Param>> 。绑定(bind) Param 仍然很有用。直接。

最佳答案

这是 jOOQ 3.5.2 中的错误 ( #4056 )。

除了您发现的解决方法之外,另一种解决方法是确保“绑定(bind)”的两个实例实际上相同,您可能应该将绑定(bind)值外部化:

Param<Object> binding = DSL.param("binding");

final ResultQuery<Record> q = create.select().from(DSL.table("my_table"))
.where((DSL.field("identifier").eq(binding)
.and(DSL.field("identifier").eq(binding))));

现在,您将显式创建一个在 AST 中使用两次的绑定(bind)值。

关于java - jOOQ - 多重绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28419569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com