gpt4 book ai didi

java - 数组的 jOOQ 查询的奇怪翻译包含函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:04:55 25 4
gpt4 key购买 nike

我的 PostgreSQL 数据库中有以下类型:

myoptions text[]

我使用 jOOQ 转换器,以便在我的记录中有一个 Set 作为对应的类型:

Set<String> myoptions

在我的查询中,我有以下条件:

c.MYOPTIONS.contains(Sets.newHashSet("option1"))

用 SQL 翻译成这样:

cast("c"."myoptions" as varchar) like ('%' || '[option1]' || '%') escape '!'

这是正常行为吗?

我想要这样的东西:

c.myoptions @> ARRAY['option1']

'option1' = ANY(c.myoptions)

预先感谢您的帮助

最佳答案

jOOQ 当前(从版本 3.8 开始)无法将您的自定义数据类型识别为 PostgreSQL 中的数组数据类型,这就是 Field.contains() 默认行为开始的原因 - 即一种将所有值都视为字符串的方法。

我创建了 feature request #5602为了这。作为一种解决方法,您可能需要使用 plain SQL 自行滚动:

public static <T, C extends Collection<T>> Condition contains(
Field<? extends C> left,
C right
) {
return DSL.condition("{0} @> {1}::text[]", left, DSL.val(right, left.getDataType()));
}

...然后您可以这样使用它:

contains(c.MYOPTIONS, Sets.newHashSet("option1"))

关于java - 数组的 jOOQ 查询的奇怪翻译包含函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40075943/

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