2017-05-05 3 views
0

JSR 303の検証を利用してユーザーが入力したデータを検証しようとしています。私が実装しようとしている検証の1つは、各フィールドの入力値のサイズが対応する列の最大サイズを超えないことを確認することです。次のように私はJPAの@Column注釈を利用していますデータベース列にフィールドをマッピングするためにJooqとJPAの@Columnアノテーションを使用してフィールド長を検証する

@ComplexValidation 
public class Person { 

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

} 

をPersonクラス上の@ComplexValidation注釈は、私はJSR 303カスタム制約バリデータであります基本的に次のステップ実行しようとしており、実装しようとして:クラス内のすべてのフィールドを@Columnアノテーションを付け

  1. Retreivesを
  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)

を参照してください。
関連する問題