将几个JPA注释分组为一个

时间:2018-11-29 09:06:23

标签: java hibernate jpa spring-data-jpa spring-data

我的实体中具有以下映射:

@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

2 个答案:

答案 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