【发布时间】:2017-10-03 18:06:21
【问题描述】:
我正在尝试通过使用 JSR 303 验证来验证用户输入的数据。我正在尝试实施的一项验证是检查每个字段的输入值的大小是否不超过相应列的最大大小。
为了将字段映射到数据库列,我正在使用 JPA 的 @Column 注释,如下所示:
@ComplexValidation
public class Person {
@Column(table = "PERSON_DETAILS", name = "FIRST_NAME")
private String firstName;
}
Person 类上的@ComplexValidation 注释是我正在尝试实现的 JSR 303 自定义约束验证器,它基本上尝试执行以下步骤:
- 检索使用
@Column注解的类中的所有字段 - 它从注解中提取表名,并用它来加载对应的JOOQ生成的代表表的类
- 从注解中提取字段名,并用它来加载对应列的数据类型和大小
在 Jooq 中有什么方法可以根据表名检索 Jooq Generated 类?我的第一次尝试可以在下面找到,但是它不起作用,因为 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();
}
}
欢迎任何其他建议:)
【问题讨论】:
标签: java validation jpa jooq