【问题标题】:jOOQ : compare uuid(from postgresql) and string(user id in class)jOOQ:比较 uuid(来自 postgresql)和字符串(类中的用户 id)
【发布时间】:2014-11-30 17:28:12
【问题描述】:

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

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

CORRESPONDENCE.USERID 是 UUID,externalId 是字符串;运算符 eq 是我无法在此处实现的运算符,它在以前的场合对我有用。

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

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

谁能帮我换个方法或告诉我哪里出错了?

【问题讨论】:

    标签: java postgresql jooq


    【解决方案1】:

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

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

    在 Java 客户端中生成 UUID 绑定值

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

    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));
    

    【讨论】:

      猜你喜欢
      • 2019-10-08
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多