JooQ中两个条件的XOR比较。

问题描述 投票:0回答:1

在PostgreSQL的WHERE条件中,我有如下形式的内容。

a != b

其中a和b是boolean。

然而,JooQ决定了boolean是一个 Condition 只知道 orand. 我可以将其转换为DNF,但这大大降低了可读性(因为这样就会变成 (a and !b) or (!a and b)).

有没有其他方法来实现这个用例?

例子

假设我有下面的SQL代码,我想把它转换成类似这样的JooQ代码。

WHERE (field_a IS NOT NULL) != (field_b IS NULL)

我想把它转换成类似这样的JooQ代码。

where(DSL.field("field_a", Integer.class).isNotNull().notEq(DSL.field("field_b", Integer.class).isNull()))

我不能,因为 notEq 并不是一个方法,在 Condition 类。

有什么方法可以做到这一点吗?

java postgresql jooq
1个回答
1
投票

我发现我可以把 Condition 作为 Field 使用 DSL.field(Condition). 该 Field 类确实有一个 notEqual 方法。我之前的例子就变成了下面这个样子。

where(DSL.field(DSL.field("field_a", Integer.class).isNotNull()).notEqual(DSL.field(DSL.field("field_b", Integer.class).isNull()))))

我不认为这是最优雅的,但绝对比使用DNF更优雅。

© www.soinside.com 2019 - 2024. All rights reserved.