【发布时间】:2019-01-09 08:10:14
【问题描述】:
我在 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,我可以手动创建我的数据库脚本,但我想避免这种情况,并通过休眠获得几乎完美的脚本
【问题讨论】:
-
不确定你使用的是哪个
@Max注解,但它恰好是javax.validation.constraints.Max,那么你需要这样实现:@Max(value = 5000) -
@XtremeBaumer 是的,它来自 javax 包,但我已经尝试过这个 @Max(value = 5000) 并且仍然被忽略:/
-
我刚刚阅读了一些关于它的文档,我认为它如下。
@Size也是数据库列约束(varchar(50)),而@Min或@Max仅在客户端作为约束(数据库中不存在这些约束)。这意味着您需要在将实例保存到数据库等之前validate。有关此主题的更多信息,请阅读the docs -
感谢您的关注,但我已经找到了解决方案!问题是我必须在我的嵌入字段上使用@Valid。例如:`@Embedded @Valid private MyEmbeddedClass myEmbeddedClass`。现在正在脚本和 PostgreSQL 中创建约束。 docs
标签: java hibernate jpa bean-validation