jOOQ:比较uuid(来自postgresql)和字符串(类中的用户id)

时间:2014-10-06 12:43:33

标签: java postgresql jooq

我的后端是postgresql。我正在尝试使用jooq记录编写一个简单的函数来从数据库中获取数据。这张桌子的DAO是我写的。我面临的问题是比较db中的UUID和提供给函数的String。

public Correspondence fetchByExternalId(String externalId) {
    CorrespondenceRecord correspondenceRecord =
            create.fetchOne(Tables.CORRESPONDENCE,
                    Tables.CORRESPONDENCE.USERID.eq(externalId));

CORRESPONDENCE.USERID 是UUID,externalId是String;运营商 eq 是我无法在这里实施的,这在以前的场合对我有用。

显示的错误是:     无法解析方法'eq(java.lang.String)'

当我提到jOOQ site for help时,它显示'eq'是它建议使用的运算符!

任何人都可以帮我替代或者告诉我哪里出错了吗?

1 个答案:

答案 0 :(得分:2)

jOOQ是一种非常类型安全的API,因此您无法使用UUIDString类型与eq()类型进行比较,因为eq() method使用了通用<T>CORRESPONDENCE.USERID列的类型,即UUID

TableField<..., java.util.UUID> USERID = ...

在Java客户端

中生成UUID绑定值

您必须以externalId类型的形式提供UUID,例如:

CORRESPONDENCE.USERID.eq(UUID.fromString(externalId))

...或者,你让jOOQ为你转换那种类型:

CORRESPONDENCE.USERID.eq(CORRESPONDENCE.USERID.getDataType().convert(externalId))

以上两者都是等效的。

在数据库中生成UUID绑定值

您始终可以通过强制转换将类型转换工作推迟到数据库(这将导致呈现CAST(? AS UUID)

CORRESPONDENCE.USERID.eq(DSL.cast(externalId, UUID.class));

...或者通过强制变量来遵守UUID类型(相信数据库可以隐式地将VARCHAR类型转换为UUID类型):

CORRESPONDENCE.USERID.eq(DSL.coerce(DSL.val(externalId), UUID.class));