如何在JOOQ中为PostgreSQL编写正确的布尔比较

时间:2019-03-13 13:28:18

标签: postgresql jooq

我有一个带有布尔列b的表t。

db.select(T.B).from(T).where(T.B.isTrue()).fetch();
db.select(T.B).from(T).where(T.B.eq(Boolean.TRUE)).fetch();

这两个语句都转换为相同的sql查询:

select "public"."T"."B" from "public"."T" where "public"."T"."B" = true;

,这不起作用,因为对于布尔比较而言,必须使用keywoard“ is”:

select "public"."T"."B" from "public"."T" where "public"."T"."B" is true;

有没有办法正确地写这个?

1 个答案:

答案 0 :(得分:0)

jOOQ当前不支持SQL <boolean test>表达式(即x IS [ NOT ] <truth value>

但是,在“ true”情况下,这实际上并不是必需的。您可以将列直接传递给where子句:

where(T.B)

...具有相同的效果。要获取反谓词,您可以编写

where(not(T.B))

如果您要进行空安全比较,则也可以使用Field.isNotDistinctFrom()Field.isDistinctFrom()

where(T.B.isNotDistinctFrom(true))
where(T.B.isDistinctFrom(true))