gpt4 book ai didi

java - 使用 jOOQ 改变数据

转载 作者:行者123 更新时间:2023-11-30 06:02:47 25 4
gpt4 key购买 nike

也许我误用了 jOOQ,因为我正在努力为这个用例在其他地方找到解决方案。

我想将我自己的方法应用于 jOOQ 查询中的某些行,如下所示:

create
.update(USER)
.set(USER.EMAIL, hash(EMAIL))
.where(USER.ID.in(userIdsToUpdate))
.execute();

其中 hash(EMAIL) 将返回电子邮件的哈希版本。

显然这个语法是无效的,但希望它传达了我的意图。

jOOQ 是否支持类似的功能?

最佳答案

如果 hash() 是供应商特定的 SQL 函数

hash() 可能是您想要使用的特定于供应商的哈希函数,但 jOOQ 不通过 DSL 提供它。 API。这种情况下的解决方案始终是求助于 plain SQL templating

public static Field<String> hash(Field<String> field) {
return DSL.field("hash({0})", SQLDataType.VARCHAR, field);
}

或者,您可以使用数据库的存储过程语法自行构建,并让代码生成器为您选择

如果 hash() 是 Java 方法

您不能让数据库从 SQL 查询中调用您的 Java 方法。如果您想对表中的所有电子邮件进行哈希处理,则必须获取所有记录,修改电子邮件,然后再次存储它们。我建议在数据库中执行此操作,因为这样会快得多,但如果这不是一个选项,那么您可以使用 jOOQ 执行以下操作:

Result<UserRecord> users = create
.select(USER.ID, USER.EMAIL)
.from(USER)
.where(USER.ID.in(userIdsToUpdate))
.fetchInto(USER);

for (UserRecord user : users)
user.setEmail(hash(user.getEmail()));

create.batchUpdate(users);

关于java - 使用 jOOQ 改变数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53674371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com