В случае, если hash()
является специфичной для поставщика функцией SQL
hash()
, вероятно, является специфичной для поставщика хэш-функцией, которую вы хотели бы использовать, но jOOQ не предлагает ее через DSL
API.Решением в этом случае всегда является использование простого SQL-шаблона
public static Field<String> hash(Field<String> field) {
return DSL.field("hash({0})", SQLDataType.VARCHAR, field);
}
В качестве альтернативы, вы можете свернуть свой собственный, используя синтаксис хранимой процедуры вашей базы данных, и позволить генератору кода подобрать его дляyou
В случае, если hash()
является методом Java
Вы не можете позволить базе данных вызывать ваш метод Java из запроса SQL.Если вы хотите хэшировать все электронные письма со своей таблицы, вам нужно будет извлечь все записи, изменить электронные письма и сохранить их снова.Вместо этого я рекомендую делать это в базе данных, так как это будет намного быстрее, но если это не вариант, вот как бы вы сделали это с 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);