JSR 303 検証を利用して、ユーザーが入力したデータを検証しようとしています。私が実装しようとしている検証の 1 つは、各フィールドの入力値のサイズが対応する列の最大サイズを超えていないことを確認することです。
フィールドをデータベース列にマップするために@Column
、次のようにJPA の注釈を利用しています。
@ComplexValidation
public class Person {
@Column(table = "PERSON_DETAILS", name = "FIRST_NAME")
private String firstName;
}
@ComplexValidation
Person クラスのアノテーションは、私が実装しようとしている JSR 303 カスタム制約バリデーターであり、基本的に次の手順を実行しようとしています。
@Column
注釈が付けられたクラス内のすべてのフィールドを取得しますJooq で、テーブル名に基づいて Jooq 生成クラスを取得できる方法はありますか? 私の最初の試みは以下で見つけることができますが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);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加