JooQ中两个条件之间的异或比较

XOR comparison between two Conditions in JooQ

在 Postgre 的 WHERE 条件中SQL 我有以下形式的东西:

a != b

其中 a 和 b 是布尔值。

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

还有其他方法可以实现这个用例吗?

例子

假设我有以下 SQL 代码:

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 class 上的方法。

有什么办法吗?

我发现我可以使用 DSL.field(Condition)Condition 包装为 FieldField class 确实有一个 notEqual 方法。我之前的例子变成如下:

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

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