【问题标题】:How do you enforce minimum size of a collection in JPA or Hibernate如何在 JPA 或 Hibernate 中强制执行集合的最小大小
【发布时间】:2018-03-06 20:33:48
【问题描述】:

使用包含字段的@Entity 类:

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

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

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

我认为必须手动执行这样的约束。我还没有找到任何描述这个约束的注释。在 setter 中手动执行似乎还不够——如果传入的 JSON 根本没有 arrays 字段怎么办? setter 永远不会被调用,也没有机会执行。

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

除了某些集合的大小之外,我还有其他限制要考虑。例如,一个类只能设置一个字段,不能同时设置。

【问题讨论】:

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


【解决方案1】:

你可以这样做:

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

你的意思是说你至少需要 1 到 10 个元素

【讨论】:

    猜你喜欢
    • 2014-10-24
    • 2017-03-01
    • 2020-07-01
    • 2011-02-16
    • 2020-08-25
    • 2017-05-12
    • 2017-08-25
    • 1970-01-01
    • 2020-12-15
    相关资源
    最近更新 更多