如何在JPA或Hibernate中强制执行集合的最小大小

时间:2017-09-25 19:12:04

标签: json hibernate spring-boot spring-data-jpa bean-validation

包含字段的@Entity类:

@JsonProperty("arrays")
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "systemID", nullable = true)
private List<PVArray> arrays = null;

定义了一个集合。下一步是强制arrays必须有一个或多个条目。

系统正在使用Spring Boot进行开发,使用Jackson进行JSON序列化/反序列化,使用Hibernate和JPA进行持久化。

我认为像这样的约束必须手动强制执行。我还没有找到任何描述这种约束的注释。设置器中的手动执行似乎不够 - 如果传入的JSON根本没有arrays字段会怎么样?永远不会召唤制定者,也没有执法机会。

是否有可能编写一个在反序列化JSON后调用的方法?或者更一般地说(因为很明显这些类除了反序列化JSON之外还有其他方式实例化),这是在实例化对象结束时调用的方法,以便可以强制执行对象约束?

我要考虑其他约束,而不仅仅是某些集合的大小。例如,一个类只能设置其中一个字段,而不是两个。

1 个答案:

答案 0 :(得分:2)

你可以这样做:

@Size(min=1, max=10)
@JsonProperty("arrays")
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "systemID", nullable = true)
private List<PVArray> arrays;

根据尺寸,您说至少需要1到10个元素