将几个JPA注释组合为一个注释



我的实体中有以下映射:

@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

如果使用JPA 2.2,则可以使用"元注释"。这是基本的Java,不是JPA特有的。查看此博客文章

您可以创建自己的自定义验证器并在实体中使用它。

基本上你创建了一个新的公告如下:

@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

最新更新