java - jOOQ : compare uuid(from postgresql) and string(user id in class)

标签 java postgresql jooq

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

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”是它建议使用的运算符!

任何人都可以帮助我找到替代方案或告诉我哪里出了问题吗?

最佳答案

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

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

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

您必须提供 externalIdUUID 的形式输入,例如:

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

...或者,您让 jOOQ 为您转换该类型:

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

以上两者是等效的。

在数据库中生成 UUID 绑定(bind)值

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

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

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

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

关于java - jOOQ : compare uuid(from postgresql) and string(user id in class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26216487/

相关文章:

java - Spring MVC 测试、JNDI

sql - 根据生成的结果过滤 SQL 查询

database - 如何使用 Pentaho 同步两个数据库?

java - 如何为jooq中的每个查询添加动态id

java - JDBC getUpdateCount 返回 0,但在 SQL Server 中更新了 1 行

java - Jackson objectMapper,尝试将 LocalDate 序列化为 "yyyy-MM-dd",将 LocalTime 序列化为 "HH:mm:ss"

java - 如何使用 PendingIntent 将发送的短信数据传递给 BroadcastReceiver?

java - 如何从 Mac 上的 Java 连接到 MS Access 2007

PostgreSQL log_min_messages 不起作用?

java - 有没有办法自动将jOOQ记录映射到Java记录?