2017-05-05 4 views
0

JSR 303 유효성 검사를 사용하여 사용자가 입력 한 데이터의 유효성을 검사하려고합니다. 구현하려는 하나의 유효성 검사는 각 필드에 대해 입력 된 값의 크기가 해당 열의 최대 크기를 초과하지 않는지 확인하는 것입니다.Jooq 및 JPA의 @Column 주석을 사용하여 필드 길이 유효성 확인

@ComplexValidation 
public class Person { 

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

} 

Person 클래스에 @ComplexValidation 주석, 나는 JSR 303 사용자 정의 제약 유효성 검사기 오전되는 다음과 같이 내가 JPA의 @Column 주석을 활용하고 데이터베이스 컬럼에 필드를 매핑하기 위해

기본적으로 다음 단계를 수행하려고하는, 구현하려고 : 클래스의 모든 필드가 @Column 주석이

  1. 꺼냅니다을
  2. 주석에서 테이블 이름을 추출하고이를 사용하여 테이블을 나타내는 해당 JOOQ 생성 클래스를로드합니다.
  3. 주석에서 필드 이름을 추출하여 해당 컬럼의 데이터 유형 및 크기를로드하는 데 사용합니다.

Jooq에서 테이블 이름을 기반으로 Jooq Generated 클래스를 검색 할 수있는 방법이 있습니까? 내 첫 번째 시도는 table(tableName)는 TableImpl 객체 SQLTable의를 돌려줍니다 때문에 그러나 그것은 작동하지 않습니다, 아래에서 찾을 수 있습니다

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(); 
    } 
} 

다른 제안이 가정

답변

1

: 환영 하나만 생성 된 스키마를 (예 : PUBLIC), 당신은 거기에서 테이블에 액세스 할 수 있습니다

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

참조 Schema.getTable(String)