Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将几个JPA注释组合成一个注释_Java_Hibernate_Jpa_Spring Data Jpa_Spring Data - Fatal编程技术网

Java 将几个JPA注释组合成一个注释

Java 将几个JPA注释组合成一个注释,java,hibernate,jpa,spring-data-jpa,spring-data,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

我的实体中有以下映射:

@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<>();
@CollectionTable(name=“test\u entity\u data”,joinColumns=@JoinColumn(name=“test\u entity\u id”))
@元素集合
@MapKeyColumn(name=“language”,长度=10)
@MapKeyClass(语言类)
@MapKeyEnumerated(EnumType.STRING)
@列(name=“value”,nullable=false)
私有映射数据=新HashMap();

我必须在代码中的一些地方使用相同的映射。有没有办法将这些注释组合成一个注释?例如,
@multi-langualdata

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

基本上,您可以创建一个新注释,如下所示:

@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 {};
}
@Target({ElementType.PACKAGE})
@保留(运行时)
@约束(validatedBy=multi-langualdatavalidator.class)
公共@接口多语言数据{
字符串消息()默认为“MultilangualData验证失败”;
类[]组()默认值{};

类如果使用JPA2.2,则可以使用“元注释”。这是基本Java,不是JPA特有的。请参见

我不能,因为我想使用的大多数注释都适用于字段而不是类型。您可以在字段级别或类级别执行元注释!这就是
@Target
的用途。链接上说
您可以对字段/方法执行相同的操作。
我如何应用例如ode>@MapKeyColumn
在验证器中?您可以在isValid方法中添加验证,如下所示:
ValidatorFactory=Validation.buildDefaultValidatorFactory();validator validator=factory.getValidator();Set constraints=validator.validate(“”;
a“Bean验证API”注释与将JPA注释分组到一个注释中以保存键入无关。见鬼,使用JPA您甚至不需要启用Bean验证。
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.
    }

}