如何修复被忽略的嵌入式对象中的验证约束?

Sha*_*iby 5 java hibernate jpa bean-validation

我在 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;

}   
Run Code Online (Sandbox Code Playgroud)

还有我的@embedded 课程:

@Embeddable
public class MyEmbeddedClass {

  @Size(max = 50)
  private String label;

  @Max(100)
  private Integer percent;
Run Code Online (Sandbox Code Playgroud)

}

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

@Entity
public class MyEntityClass extends BaseEntity {

  @Size(max = 50)
  private String name;

  @Max(6000)
  private Integer size;
Run Code Online (Sandbox Code Playgroud)

}

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

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

小智 6

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

@Entity
public class Notice extends BaseEntity {

    @Embedded
    @Valid
    private MyEmbeddedClass myEmbeddedClass;

    ...
}
Run Code Online (Sandbox Code Playgroud)