Сгруппируйте несколько аннотаций JPA в один - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть следующее отображение в моей сущности:

@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 голосов
/ 29 ноября 2018

Если вы используете JPA 2.2, вы можете использовать «метааннотации».Это базовая Java, не специфичная для JPA.Смотрите это сообщение в блоге

0 голосов
/ 29 ноября 2018

Вы можете создать свой собственный валидатор и использовать его в своей сущности.

По сути, вы создаете новую аннотацию, как показано ниже:

@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

...