gpt4 book ai didi

java - jOOQ:允许字符约束?

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

我正在考虑从 Hibernate 迁移到 jOOQ,但我找不到例如如何在 Hibernate 中像这样在 String 上设置模式约束:

@NotEmpty(message = "Firstname cannot be empty")
@Pattern(regexp = "^[a-zA-Z0-9_]*$", message = "First Name can only contain characters.")
private String firstname;

我将如何在 jOOQ 中做到这一点?

最佳答案

“jOOQ 方式”

进行此类验证的“jOOQ 方式”是创建:

  • 数据库中的CHECK 约束。
  • 数据库中的触发器。
  • 数据库中的域。

毕竟,如果您想确保数据完整性,数据库就是此类约束和完整性检查所在的地方(可能除了功能等效的客户端验证之外)。想象一下绕过 JSR-303 验证的批处理作业、Perl 脚本,甚至是 JDBC 语句。您很快就会发现自己的数据已损坏。

如果您确实想要实现客户端验证,您仍然可以在与您的 UI 交互的 DTO 上使用 JSR-303,例如。但是在将数据传递给 jOOQ 进行存储 (as artbristol explained) 之前,您必须执行验证。

使用转换器

但是,您可以通过在各个列上声明一个 Converter 并通过 registering such Converter with the source code generator 来使用您自己的自定义类型。 .

本质上,Converter 是:

public interface Converter<T, U> extends Serializable {
U from(T databaseObject);
T to(U userObject);
Class<T> fromType();
Class<U> toType();
}

在您的情况下,您可以这样实现注释:

public class NotEmptyAlphaNumericValidator implements Converter<String, String> {

// Validation
public String to(String userObject) {
assertNotEmpty(userObject);
assertMatches(userObject, "^[a-zA-Z0-9_]*$");
return userObject;
}

// Boilerplate
public String from(String databaseObject) { return databaseObject; }
public Class<String> fromType() { return String.class; }
public Class<String> toType() { return String.class; }
}

请注意,这更像是一种变通方法,因为 Converter 并不是为这个用例设计的,即使它可以完美地实现它也是如此。

使用正式的客户端验证

还有一个待处理的功能请求 #4543添加对客户端验证的更多支持。从 jOOQ 3.7 开始,这还没有实现。

关于java - jOOQ:允许字符约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32690628/

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