首页 > 解决方案 > 如何修复被忽略的嵌入式对象中的验证约束?

问题描述

我在 Spring Boot 和 Hibernate REST API 中有我的实体对象。这个类有很多领域。其中一部分是嵌入的,并且 @Min @Max 等验证约束不适用于 @Embeddable 类中的字段。相同的验证规则在 @Entity 类中完美运行。我正在使用 javax.validation.constraints.Max

我的主要对象如下所示:

@Entity
public class Notice extends BaseEntity {

  @Embedded
  private MyEmbeddedClass myEmbeddedClass;

  @OneToOne(cascade = CascadeType.ALL)
  @JoinColumn(name = "entity_class_id")
  private MyEntityClass myEntityClass;

}   

还有我的@embedded 类:

@Embeddable
public class MyEmbeddedClass {

  @Size(max = 50)
  private String label;

  @Max(100)
  private Integer percent;

}

@Max 对百分比字段的约束被忽略,但 @size 工作正常

@Entity
public class MyEntityClass extends BaseEntity {

  @Size(max = 50)
  private String name;

  @Max(6000)
  private Integer size;

}

并且在这里创建了对字段大小的@Max 约束和@size 约束

有没有办法来解决这个问题?我的 Spring Boot 版本是 2.1.1,我可以手动创建我的数据库脚本,但我想避免这种情况,并通过休眠获得几乎完美的脚本

标签: javahibernatejpabean-validation

解决方案


@Valid如果要验证对象中定义的约束,则需要在嵌入对象上添加注释@Embeddable

@Entity
public class Notice extends BaseEntity {

    @Embedded
    @Valid
    private MyEmbeddedClass myEmbeddedClass;

    ...
}

推荐阅读