如何向集合项添加约束

时间:2018-09-04 12:19:24

标签: java hibernate bean-validation

我有一个带有字符串集合的实体。我想添加一个约束来检查集合中所有项目的大小是否小于255。

假设我有一个实体Area,其中包含references的集合。我想确保所有引用都短于255个字符。你知道我怎么能做到吗?

@Entity
@Table(name = "AREA")
public class Area  Serializable {

    private static final long serialVersionUID = -4756123949793458708L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID", unique = true, nullable = false)
    private Integer id;

    @ElementCollection
    @CollectionTable(name = "AREA_REFERENCES", joinColumns = @JoinColumn(name = "AREA_ID"))
    @Column(name = "REFERENCE", nullable = false)
    @Size(max = 255) // THIS ANNOTATION SEEMS TO NOT WORK
    private Set<String> references = new HashSet<>();

    ....

3 个答案:

答案 0 :(得分:2)

这样注释

@Size(max = 255)
private Set<String> references;

表示Set<String>最多可以包含255个字符串。 当然,这不是您想要的。

相反,您希望每个字符串最多包含255个字符: 您可以通过在< >中注释类型参数来实现此目的:

private Set<@Size(max = 255) String> references;

为此,您将需要全新版本的Hibernate Validator(6.0.x) 和Bean验证(2.0.1)。

有关类似问题,另请参见此answer

答案 1 :(得分:1)

根据how-to-limit-the-column-length-while-using-collection-of-primitive-type,您可以将大小约束设置为Column注释。

答案 2 :(得分:0)

对于验证,您可以从Bean验证API(JSR 303)中添加类似@Size(max=allowed_length)的约束。

Hibernate使用Bean验证约束来生成准确的数据库模式。 例如:

@Size.max导致varchar(max)的{​​{1}}定义, Strings导致列检查(例如值<= max)