Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Jooq和JPA'验证字段长度;s@列注释_Java_Validation_Jpa_Jooq - Fatal编程技术网

Java 使用Jooq和JPA'验证字段长度;s@列注释

Java 使用Jooq和JPA'验证字段长度;s@列注释,java,validation,jpa,jooq,Java,Validation,Jpa,Jooq,我试图通过使用JSR303验证来验证用户输入的数据。我试图实现的一个验证是检查每个字段输入值的大小是否超过相应列的最大大小 为了将字段映射到数据库列,我使用了JPA的@column注释,如下所示: @ComplexValidation public class Person { @Column(table = "PERSON_DETAILS", name = "FIRST_NAME") private String firstName; } Person类上的@Comple

我试图通过使用JSR303验证来验证用户输入的数据。我试图实现的一个验证是检查每个字段输入值的大小是否超过相应列的最大大小

为了将字段映射到数据库列,我使用了JPA的
@column
注释,如下所示:

@ComplexValidation
public class Person {

    @Column(table = "PERSON_DETAILS", name = "FIRST_NAME")
    private String firstName;

}
Person类上的
@ComplexValidation
注释是我尝试实现的JSR303自定义约束验证器,它基本上尝试执行以下步骤:

  • 检索用
    @Column
    注释注释的类中的所有字段
  • 它从注释中提取表名,并使用它加载表示该表的相应JOOQ生成的类
  • 它从注释中提取字段名,并使用它加载相应列的数据类型和大小
  • 在Jooq中有没有任何方法可以根据表名检索Jooq生成的类?我的第一次尝试可以在下面找到,但是它不起作用,因为
    table(tableName)
    返回一个SQLTable而不是TableImpl对象:

    Column columnAnnotation = field.getDeclaredAnnotation(Column.class);
    if (columnAnnotation != null) {
        String tableName = columnAnnotation.table();
        String fieldName = columnAnnotation.name();
    
        TableField tableField = (TableField) ((TableImpl) table(tableName)).field(fieldName);
        int columnLength = tableField.getDataType().length();
    
        if (fieldValue.length() > columnLength) {
            constraintValidatorContext
                .buildConstraintViolationWithTemplate("exceeded maximum length")
                .addPropertyNode(field.getName())
                .addConstraintViolation();
        }
    }
    

    欢迎任何其他建议:)

    假设您只有一个生成的架构(例如,
    PUBLIC
    ),您可以从那里访问表:

    Table<?> table = PUBLIC.getTable(tableName);
    
    Table Table=PUBLIC.getTable(tableName);