select jooq 中的二进制 (16),但显示十六进制字符串

select binary(16) in jooq, but show hex string

在 table 中是一个 pk,uuid 存储为二进制 (16)。

我可以使用普通 sql:

检索十六进制

select hex(UUID) as uuid from tbl ;

但是 jooq 等价物不知道十六进制函数。

Result<Record1<byte[]>> result = ctx
                        .select(tbl.UUID)
                        .from(tbl)
                        .fetch();

转换为字符串给出 java 对象的 ID。

有什么想法吗?

Result<Record1<byte[]>> result = ctx
                        .select(tbl.UUID.cast(String.class))
                        .from(tbl)
                        .fetch();

使用 ip (ipv4, ipv6) 的相同问题:

select inet_ntoa(conv(hex(IP), 16, 10)) as ip from tbl ;

jOOQ 不支持开箱即用的所有特定于供应商的功能。每当您缺少这样的功能时,您可以使用 plain SQL:

自己创建它
public class DSLExtensions {
    public static Field<String> hex(Field<byte[]> field) {
        return DSL.field("hex({0})", String.class, field);
    }
}

这显然也适用于您的其他功能,例如 inet_ntoa()conv()

@Lukas Eder,你可以进一步简化它。

public static Field<String> hex(Field<byte[]> field) {
    return DSL.function("hex", String.class, field);
}