为我的 DTO 构建复合唯一约束

问题描述

我正在尝试为我的 Java/Spring Boot REST API 构建一个 ConstraintValidator。
问题是: 我必须将一个国家和一个州/省保存到数据库中,但一个国家不能有 2 个同名的州/省。

所以我设置了我的域类:State.class,使用来自 javax.persistence 的 @UniqueConstraint 并且当对象到达我的数据库时它工作得很好但是,我想让它更安全并构建这个 ConstraintValidator 来为我做同样的事情请求 DTO,我称之为 StateRequestDto.class。

因为我喜欢尝试使东西通用,所以我正在尝试构建一个通用的多约束验证器,就像您在 DTO 类上使用的那样,传递您希望唯一的参数组合并使用实现 ConstraintValidator 的类,构建 JPQL 查询以查看注解上的参数组合是否已存在。

这是我的 StateRequestDto.class

@UniqueCombo(combo = {"idCountry","name"})
public class StateRequestDto {

    @Unique(fieldName = "name",clazz = "State")
    private String name;
    @ExistsId(entityName = "Country")
    private Integer idCountry;

    public StateRequestDto (String name,Integer idCountry) {
        this.name = name;
        this.idCountry = idCountry;
    }

    public State convert(Country country) {
        return new State(name,country);
    }

    public Object getIdCountry() {
        return this.idCountry;
    }

    public String getName() {
        return this.name;
    }
}

还有我的 UniqueCombo 注释:

@Target({TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = UniqueCombovalidator.class)
public @interface UniqueCombo {
    String message() default "Testing...";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};

    String[] combo();
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)