我的实体中具有以下映射:
@CollectionTable(name = "test_entity_data", joinColumns = @JoinColumn(name = "test_entity_id"))
@ElementCollection
@MapKeyColumn(name = "language", length = 10)
@MapKeyClass(Language.class)
@MapKeyEnumerated(EnumType.STRING)
@Column(name = "value", nullable = false)
private Map<Language, String> data = new HashMap<>();
我必须在代码中的几个地方使用相同的映射。有什么办法可以将这些注释分组?例如。 @MultilangualData
?
答案 0 :(得分:0)
如果使用JPA 2.2,则可以使用“元注释”。这是基本的Java,不特定于JPA。参见this blog post
答案 1 :(得分:-1)
您可以创建自己的自定义验证器,并在您的实体中使用它。
基本上,您将创建一个新的注释,如下所示:
@Target( { ElementType.PACKAGE })
@Retention(RUNTIME)
@Constraint(validatedBy = MultilangualDataValidator.class)
public @interface MultilangualData{
String message() default "MultilangualData validation failed";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
并在使用此注释时编写验证器以验证您的所有条件:
public class MultilangualDataValidator implements ConstraintValidator<MultilangualData, String> {
private MultilangualData multilangualData;
public void initialize(MultilangualData constraintAnnotation) {
this.multilangualData = constraintAnnotation.value();
}
public boolean isValid(String object, ConstraintValidatorContext constraintContext) {
// Do your validation here.
}
}
引自: https://docs.jboss.org/hibernate/validator/4.1/reference/en-US/html/validator-customconstraints.html